sizeof的问题

keyz 2003-09-11 05:07:23
CustRec = record
a,b:byte;
c:dword;
d:byte;
end;

大小是多少?为什么我用sizeof(CustRec)测出来是12?
...全文
26 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxpbuaa 2003-09-13
  • 打赏
  • 举报
回复
在没有packed 修饰字的情况下,编译器将按照编译指令$A指定的格式对齐记录的字段;否则,SizeOf才能取得各字段类型原始大小之和。是否对齐与虚拟方法表(VMT)没有任何关系,因为VMT是和类关联的,而记录并不是类。

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
hkbarton 2003-09-11
  • 打赏
  • 举报
回复
写的有点错,上面改正了,呵呵
hkbarton 2003-09-11
  • 打赏
  • 举报
回复
是packed record
hkbarton 2003-09-11
  • 打赏
  • 举报
回复
编译器自动对齐功能,如果你想得到你预期的数据可以用
CustRec =package record
a,b:byte;
c:dword;
d:byte;
end;
  • 打赏
  • 举报
回复
具体内容参看

《DELPHI高手突破》
  • 打赏
  • 举报
回复
呵呵,,

VMT自动地把大小设为对齐,

即使不足4的也要凑成4
  • 打赏
  • 举报
回复
呵呵,,

VMT自动地把大小设为对齐,

即使不足4的也要凑成4

chl_ccssddnn 2003-09-11
  • 打赏
  • 举报
回复
应该就是12,我把d放在ab一起声明,
type
CustRec = record
a,b,d:byte;
c:dword;
end;
大小就变成了8。
所以肯定不同类型的成员之间有隔离部分,这个隔离部分占据了一定的字节数

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧