packed record 和 record有何区别?

解决方案 »

  1.   

    packed record会对数据进行压缩type
      // Declare an unpacked record
      TDefaultRecord = Record
        name1   : string[4];
        floater : single;
        name2   : char;
        int     : Integer;
      end;
      // Declare a packed record
      TPackedRecord = Packed Record
        name1   : string[4];
        floater : single;
        name2   : char;
        int     : Integer;
      end;
    var
      defaultRec : TDefaultRecord;
      packedRec  : TPackedRecord;
    begin
      ShowMessage('Default record size = '+IntToStr(SizeOf(defaultRec)));
      ShowMessage('Packed record size = '+IntToStr(SizeOf(packedRec)));
    end; Default record size = 20
     Packed record size = 14
      

  2.   

    type
    Rec1 =record
     A:Byte;//1字节
     B:LongWord;//3字节
    end;Rec2=packed record
     A:Byte;//1字节
     B:LongWord;//4字节
    end;rec1的内存分配,需要四字节对齐.
    0---1---2---3---4--5--6--7--8
    |A |            |   B       |
    -----------------------------rec2的内存分配,不需要四字节对齐.
    0---1---2---3---4--5
    |A  |       B      |
    --------------------Sizeof(Rec1)值为8Sizeof(Rec2)值为5
      

  3.   

    Packed Record
    类的数据各个成员共占一个Packed Record类型TPackedRecord = Packed Record
        name1   : string[4];
        c       : char;
        int     : Integer;
      end;
    var
    pc:TPackedRecord 
    你对其中的int 赋值 2,对c赋值为'a'
    则内存情况为
    120000 .........    
    120001 ......... 字符c的地地址
    而从120000到120003为int的地址而 Record 则是每个成员各自占有单独内存区