type
  arec = record
    s : string[10];
    i : integer;
  end;so, sizeof(arec) = ???
不许编译,第一个回答对的50分,解释清楚为什么的100分,剩下20分分给顶的兄弟~~~

解决方案 »

  1.   

    不对,上面写错了,应该是:
    type
      arec = record
        s : string[8];
        i : integer;
      end;
      

  2.   

    应该是3*4+4=16;string[8],是分配9个byte的空间,string[0]是存放string的长度,string[1]---string[8]是申请的串。在D结构中,按照4个字节对齐,所以这里是有3个,共12个字节。integer,4个字节。
    所以共16个字节。  arec = packed record
        s : string[8];
        i : integer;
      end;
    按照字节对齐,就是8+1+4=13了。
      

  3.   

    arec = record
        s : string[8];//9字节
        i : integer;//4字节。
      end;9+4 =13然后4字节取整。。16字节。。
      

  4.   

    Options里若设置了不同的Record Field alignment有不同的结果。
      

  5.   

    integer 占4个字节
    实际的string[8]占9个字节
    string[8]中的每一个字符占1的字节但是在记录中, 会以较大的数据类型为基准'分块' 所以这里每一块为4个字节(integer占4个)
    9/4=2.25,  由于是4个字节分一块,所以这里String[8]由3个'块组成' 也就是占12个字节
    加上integer的4个 一共16个字节这样对吗?
      

  6.   

    >>Options里若设置了不同的Record Field alignment有不同的结果
    当然是默认的8原来这么简单~~~~~~不过以前俺一直以为s : string[8]; 和s : array[0..7] of char;占用一样地空间~~~没有想到还要存放长度~~~~一直以为短字符串和Array of Char兼容的~~~短字符串存放什么长度嘛谢谢~~
      

  7.   

    To gzmhero(hihihi):
    抱歉啊,结帖的时候分给错了~~~你应该150啊~~~~~不要生气,下次~~~~~~~~~~