union中隐藏的字节对齐

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值