说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

sizeof的问题

编辑:说三道四文库 发布时间:2018-04-25 08:49
HTML文档下载 WORD文档下载 PDF文档下载
CustRec = record
    a,b:byte;
    c:dword;
    d:byte;
  end;

大小是多少?为什么我用sizeof(CustRec)测出来是12?
应该就是12,我把d放在ab一起声明,
type 
   CustRec = record
    a,b,d:byte;
    c:dword;
  end;
大小就变成了8。
所以肯定不同类型的成员之间有隔离部分,这个隔离部分占据了一定的字节数
呵呵,,

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

即使不足4的也要凑成4

呵呵,,

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

即使不足4的也要凑成4
具体内容参看

《DELPHI高手突破》
编译器自动对齐功能,如果你想得到你预期的数据可以用
CustRec =package record
    a,b:byte;
    c:dword;
    d:byte;
  end;
是packed record
写的有点错,上面改正了,呵呵
在没有packed 修饰字的情况下,编译器将按照编译指令$A指定的格式对齐记录的字段;否则,SizeOf才能取得各字段类型原始大小之和。是否对齐与虚拟方法表(VMT)没有任何关系,因为VMT是和类关联的,而记录并不是类。

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘