关于BCB6中sizeof的问题?(50分)

  • 主题发起人 主题发起人 ansili
  • 开始时间 开始时间
A

ansili

Unregistered / Unconfirmed
GUEST, unregistred user!
下面的结构在BCB6中sizeof( struct udpinthdr )的值是12,
但是VS2003(VC7)sizeof( struct udpinthdr )的值是9。
为什么呀?怎么可以在BCB的值为9呢?
struct udpinthdr {
WORD unk;

DWORD time;
byte frame_num;
byte frame_part;
byte frame_tot;
};
 
是前面加了'#pragma pack '的原因,这个是什么意思?
#pragma pack( push, ml20dll_pack )
#pragma pack( 1 )
// TTTTTTTTTTT FF NN TO
//05 49 2d 3d 87 02 0a 05 06
struct udpinthdr {
word unk;
dword time;
byte frame_num;
byte frame_part;
byte frame_tot;
};
 
内存数据对齐的原因导致的.
#pragma pack( push, ml20dll_pack )
#pragma pack( 1 )
指标编译器以1字节对齐. 如果不指定一般就是4字节对齐.
具体的东东我也不想多说, 可以在google搜索 内存 结构 对齐
找到相关文献
 
数据对齐
不对齐的数据存取在x86上是影响速度,但节省空间
对齐的数据浪费空间,但速度快
 
结构在32位计算机上默认是按4字节的倍数对齐的。
因为32位计算机的寄存器是32位的,也就是4字节。这样处理数据最快。
同理16位计算机上默认就是2字节对齐。。。。。。
当然到底按什么方式对齐是可以调节的,#pragma pack( n)表示按n个字节方式对齐数据。
n一般取1,2,4,8,16.
 
多人接受答案了。
 
后退
顶部