不要认为内存字节对齐是struct的专利,在union中也会出现内存对齐的情况。
#include <stdio.h>
#include <iostream.h>
union u{
int a[5]; //20个字节
char b;//1个字节
double c;//8个字节
};
按理说sizeof(u)等于20,但是这里最大的数据单元是double,内部数据将会按照8字节进行对齐,所以int a[5]按照8字节对齐后就为24个字节。
struct s{
u b;
int a;
};
按理说这里sizeof(s)应该是24,但是由于u是按8字节进行对齐的,所以这里的数据单位也将会以8字节进行对齐。24+8=32个字节
struct s1{
int n;
char a;
};
VC6中默认是按照4字节进行对齐,这里sizeof运算后结果应该是8字节。
void main(int argc, char *argv[])
{
cout<<"union u "<<sizeof(u)<<endl;
cout << sizeof(s) << endl;
cout<< sizeof(s1)<<endl;
}