union中隐藏的字节对齐

来源:互联网 发布:公司域名怎么申请 编辑:程序博客网 时间:2024/04/30 10:48

不要认为内存字节对齐是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;

}

0 0