奇怪得sizeof问题 ( 积分: 100 )

  • 主题发起人 主题发起人 dxj_lhq
  • 开始时间 开始时间
D

dxj_lhq

Unregistered / Unconfirmed
GUEST, unregistred user!
我定义得结构如下:
TYPE _VSIP_HEADER = RECORD
ProtocolVersion : WORD;
MsgType : char;
TransactionNumber : WORD;
Lenght : WORD;
end;
TYPE VSIP_HEADER = _VSIP_HEADER;

在程序中使用sizeof(VSIP_HEADER)得到得长度为什么是8啊??明明只有7个字节啊
 
我定义得结构如下:
TYPE _VSIP_HEADER = RECORD
ProtocolVersion : WORD;
MsgType : char;
TransactionNumber : WORD;
Lenght : WORD;
end;
TYPE VSIP_HEADER = _VSIP_HEADER;

在程序中使用sizeof(VSIP_HEADER)得到得长度为什么是8啊??明明只有7个字节啊
 
TYPE _VSIP_HEADER = [red]packed [/red]RECORD
 
就是,不加packed时Delphi会自动对齐字边界。
 
这是因为,你的TYPE _VSIP_HEADER有4个成员,你用sizeof求它占用的空间,实际上计算的是这4个成员的指针所占的空间之和.
用packed record才是实际数据类型所占的空间大小.

换句话说,非packed record内存模型是指针链表,而packed record的内存模型是数组.
 
后退
顶部