分类: C/C++
2013-05-06 15:23:29
1、 对于结构的各个成员,第一个成员位于偏移为0的位置,以后每个数据成员的偏移量必须是-----------min(#pragma pack()指定的数,这个数据成员的自身长度)------- 的倍数。
2、 在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照---------#pragma pack指定的数值和结构(或联合)最大数据成员长度中---------------,比较小的那个进行。
#pragma pack(n) 表示设置为n字节对齐。 VC6默认8字节对齐, gcc 32位默认4字节对齐, gcc 64位默认是8字节对齐
struct test
{
char a;
double b;
};
在vc下 sizeof(test)=16;
gcc下sizeof(test)=12;
总结:内存对齐在不同平台不同编译器是有区别的,所以如果服务器是Linux, 客户端是windows, 网络传输struct,要指定pragma pack(4)