分类:
2009-06-03 14:13:09
|
#pragma 其实就是控制编译的参数
由于编译器存在数据对齐的问题,如果在定义数据类型的时候不用这两个东东,编译器就会按照默认的方式进行对齐,比如一个BYTE型的变量,长度就可能不再是一个字节,会出现一些预想不到的结果
举个简单的例子:
struct st
{
int m_iMember1;
char m_cMember2;
long m_lMember3;
}
在使用#pragma pack(1) 时sizeof(st)=9(32位机器)
vc默认:sizeof(st)=16 因为VC默认以8字节对齐,其他编译器可能不一样。
如果使用#pragma pach(4): sizeof(st)=12;
vc默认:sizeof(st)=16 因为VC默认以8字节对齐,其他编译器可能不一样。"
是不对的.在32位机器上的结果是12.因为32位CPU不能支持8字节以上的对齐方式.它都以4字节方式对齐的.