如下的结构:  Ttest = Record
    a: LongInt;           //4
    b: Byte;              //1
    c: Boolean;            //1           
    d: Boolean;          //1
    e: Boolean;          //1    f: Double;          //8
    g: Word;          //2
    h: Word;         //2
    i: Word;        //2
    j: Word;        //2
    k: LongInt;        //4
    l: Double;        //8
  end;Sizeof(TTest) = 40;
但我用手工算来算去,都只有36, 为什么?
Word -----  2 Byte;
Boolean ---- 1 Byte
LongInt ---- 4 Byte
Double ----- 8 Byte谢谢!

解决方案 »

  1.   

    这个我不是太清楚,不过我知道,不同机器上,类型会占用不同的空间的,你说的占多少字节并不是绝对的数的。会根本CPU什么的,可能占用的字节多一点少一点。
      

  2.   

    Sorry,解决了。Compiler setting 问题。Record Field alignment set to 8.  就会造成这种结果。
    SET TO 1. 就没问题。
      

  3.   

    Ttest = Record packed
        a: LongInt;           //4
        b: Byte;              //1
        c: Boolean;            //1           
        d: Boolean;          //1
        e: Boolean;          //1    f: Double;          //8
        g: Word;          //2
        h: Word;         //2
        i: Word;        //2
        j: Word;        //2
        k: LongInt;        //4
        l: Double;        //8
      end;
      

  4.   

    用packed关键字,就可以保证record的大小为实际的字节数
      

  5.   

    Ttest =Record
        a: LongInt;           //4
        b: Byte;              //1
        c: Boolean;            //1
        d: Boolean;          //1
        e: Boolean;          //1    f: Double;          //8
        g: Word;          //2
        h: Word;         //2
        i: Word;        //2
         j: Word;        //2
        k: LongInt;        //4  
    //-------------------〉这里有4位为空的,没有packed下面的l要求安八位地址对齐
        l: Double;        //8
      

  6.   

    Ttest =Record
        a: LongInt;           //4
        b: Byte;              //1
        c: Boolean;            //1
        d: Boolean;          //1
        e: Boolean;          //1    f: Double;          //8
        g: Word;          //2
        h: Word;         //2
        i: Word;        //2
         j: Word;        //2
        k: LongInt;        //4
        n:longint;  -------------------〉插入一个四位的变量
        l: Double;        //8sizeof(test)=40 没有增加
      

  7.   

    即使你k的长度为1(boolean),总长度也是40
      

  8.   

    前两天也在研究这个问题,
    还是不太明白,如果你把其中的一些变成extend(10),结果还是不对,没有找到规律,
    但是用packed record的绝对没错,没有对齐的概念,是挨着存的
      

  9.   

    填充啊……bus是32位的……填了更快,你不想的话加上packed就行了