以下的記錄(結構)變數在記憶體占(   )位元组?
   type
     a = packed record
      v1: Byte; 
      v2: Word;  
      v3: string[8]; 
      v4: Double; 
      v5: string; 
      v6: TForm; 
     end;

解决方案 »

  1.   

    用SizeOf,取
    注意 string[8]长度不是8,是9
      

  2.   

    byte 1
    word 2
    string[8] 9
    double 8
    string 4
    TForm 4
      

  3.   

    如果換成c++,结论会不一样。会大一些,因为c++内存对齐的方式和delphi不一样,delphi是byte。c++要看系统和编译器。
      

  4.   


    和语言有什么关系,他定义的时候就加了关键字packed , C++里加上#pragma pack(1)
      

  5.   

    果然是28  为什么string[8]占9位,是因为结束符吗?
      

  6.   

    string[8]有8个字符,分别从string[1]到string[8]
    string[0]表示字符串元素个数,这个是pascal集成过来的。当然只能用于shortstring
      

  7.   

    用packed这个
    会压缩吧
    如果不用就会对齐
      

  8.   

    我一般不会在record中使用string,最多使用一个string[]
    因为用前者的话,大小问题还真不好说,按照各位大大的说法,他占位4个字节,
    那么就是说他只是一个指针,或者是一个引用了?那请大家考虑这个情况: 如果我们要把一个包含string的record,读进一个流中aStream: TMemoryStream;
    gs: TMyRecord;aStream.Write(gs, SizeOf(TMyRecord));会出现什么情况?????