CustRec = record
    a,b:byte;
    c:dword;
    d:byte;
  end;大小是多少?为什么我用sizeof(CustRec)测出来是12?

解决方案 »

  1.   

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

  2.   

    呵呵,,VMT自动地把大小设为对齐,即使不足4的也要凑成4
      

  3.   

    呵呵,,VMT自动地把大小设为对齐,即使不足4的也要凑成4
      

  4.   

    具体内容参看《DELPHI高手突破》
      

  5.   

    编译器自动对齐功能,如果你想得到你预期的数据可以用
    CustRec =package record
        a,b:byte;
        c:dword;
        d:byte;
      end;
      

  6.   

    在没有packed 修饰字的情况下,编译器将按照编译指令$A指定的格式对齐记录的字段;否则,SizeOf才能取得各字段类型原始大小之和。是否对齐与虚拟方法表(VMT)没有任何关系,因为VMT是和类关联的,而记录并不是类。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————