哪位仁兄告诉我以下两种记录的不同么?
1、==================================
  PSysInfo = ^TSysInfo;
  TSysInfo = record
    UserID:   string;    
    UserName: string;    
  end;2、==================================
  PSysInfo = ^TSysInfo;
  TSysInfo = packed record   //多了个packed
    UserID:   string;    
    UserName: string;    
  end;

解决方案 »

  1.   

    第一种不带packed关键字的结构体表明编译器编译时要求进行字对齐,
    而第二种带packed关键字的结构体表明编译器编译该结构体时不需要进行字对齐,这种方式对结构体中的字段访问会比第一种方式慢!但是更节约空间
      

  2.   

    用sizeof返回占用空间大小的时候packed record会比较准确一些,如果用在做通信上,最好定义成packed record
      

  3.   

    Linux2001(闭关开发中) 兄:请教,字对齐是什么意思?
      

  4.   

    比如:
      TA = record
        a: Char;
        b: Integer;
      end;

      TB = packed record
        a: Char;
        b: Integer;
      end;
    中:
    TA.b位于TA结构开始处第4个字节, TB.b位于TB结构开始处第二个字节. 即TA结构中在TA.a和TA.b中间插了3个无用字节, 为了TB.b在内存中的地址是按字对齐的--即这个地址能被4整除, 而TB中则没有这些无用字节, 但是TB.b不是字对齐的, 对它的访问比对TA.b慢.
      

  5.   

    在Windows中内存的分配一次是4个字节的。而Packed按字节进行内存的申请和分配,这样速度要慢一些,因为需要额外的时间来进行指针的定位。因此如果不用Packed的话,Delphi将按一次4个字节的方式申请内存,因此如果一个变量没有4个字节宽的话也要占4个字节!这样就浪费了。