C语言是自对齐的,32位以4字节对齐,64位以8字节对齐(1字节=8 bits)
自对齐的好处:在一条指令内完成数据的取或者存的操作,使得内存访问更快;否则,如果一个变量跨机器字存储,那么要做两次或更多次的访问(先去存在前一个机器字的内容,再取存在后一个机器字的内容)。
对齐要求:
内存中的实际存储情况:
例1:代码
char *p; char c; int x;
内存中的存储
char *p; //4 bytes(32位)或8 bytes(64位) char c; //1 byte char pad[3]; //3 bytes,无用空间,老派术语称之为slop(水坑) int x; // 4 bytes
消除水坑
可以通过改变变量声明的位置挤掉水坑。
水坑发生于大数据类型的存储区域紧跟在一个较小的数据类型的存储区域之后。消除水坑的方法是按对齐的降序来对结构体成员重排序。
原文:http://www.cnblogs.com/qionglouyuyu/p/4969260.html