VC中提供了#pragma pack(n)来设定变量以n字节对齐方式。
默认为8字节对齐,如在stdio.h中有:
#ifdef _MSC_VER //microsoft c compiler version
/*
* Currently, all MS C compilers for Win32 platforms default to 8 byte
* alignment.
*/
#pragma pack(push,8)
#endif /* _MSC_VER */
如下例:
#pragma pack(push) //保存对齐状态
#pragma pack(4)//设定为4字节对齐
struct test{
char a; //1
int b; //4
short c; //2 long d; //4 double e; //8};
#pragma pack(pop)//恢复对齐状态
假设n为自定义对齐方式字节大小,结构体的对齐字节大小为:align = MAX(N,MAX(sizeof(type[i]))),type[i]为结构体第i个变量的类型。
sizeof(struct) = align的倍数。
运行时给结构体分配内存是顺序地安排,align是顺序地递增的。
如上例,内存分布为: a b c d e
+*** ++++ ++****** ++++**** ++++++++ (+位为占有位,*为填补位)