所谓数据对齐,是指数据所在的内存地址必须是该数据长度的整数倍。DWORD数据的内存起始地址能背4除尽,WORD数据的内存起始地址能被2除尽。在默认情况下,为了方便对结构体内元素的访问和管理,当结构体内的元素的长度都小于处理器的位数时,便以结构体里面最长的数据元素为对齐单位,也就是说,结构体的长度一定是最长的数据元素的整数倍。如果结构体内存在长度大于处理器位数的元素,那么就以处理器的位数为对齐单位。但是结构体内类型相同的连续元素将在连续的空间内,和数组一样。
例如:
class A
{
short a;
short b;
short c;
};
 
class B
{
short a;
long b;
};
 
class C
{
char a;
char b;
double c;
};
 
char D
{
char a;
double b;
char c;
};
 
char E
{
char a;
int b;
float c;
double d;
};
 
 
sizeof(A) = 6;
sizeof(B) = 8;
sizeof(C) = 16;
sizeof(D) =24;
sizeof(E)= 24;
sizeof()只是计算栈中的数据,假如一个类里含有非栈中成分,如static,是不计算在内的。