本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie
自然对齐:
1.一个类型实例的大小要能整除其地址值。
2.数组有着和数组里类型本身相同的对齐要求。
3.一个聚集类型的实例,其对齐要求最严格的子类型的排列要能整除聚集的地址
在32位机器上,
内建类型主要考虑它的存放地址值
char的大小为1(以字节计),所以它可以被存储在内存的任意地址处
short的大小为2,所以它只能存储在“偶数”地址处
integer和指针的大小为4(32位机上一个字为4个字节),所以它们只能存储在一个字界中
double的大小为8,所以它只能存储在两个字界中
自定义类型除了考虑它内部的内建类型的存放地址值外,还要考虑它的类型实例的大小。如果该大小不能整除其地址值。则要在其后padding
示例:struct
示例:union --》union的大小为联合中最大的变量长度的整数倍
#include <iostream>
using namespace std;
union {
int a;
char b[2];
} u;
int main(int argc, char *argv[])
{
u.b[0] = 0x01;
u.b[1] = 0x11;
int a = 0x1101;
cout << sizeof(u) << endl;
cout << u.a << endl;
cout << a << endl;
system("pause");
}
输出:
4
4353
4353
参考:《大规模C++程序设计》