C++ 内存对齐问题(以结构体为例)

已知sizeof(char)=1,sizeof(short)=2,sizeof(int)=4,现在有个结构体如下:

struct size1 
{
int a;
char c;
short s;
};
sizeof(size1)=8
struct size2 
{
int a;
char c;
char b;
short s;
};
sizeof(size2)=8

环境:VC6.0,32位的Win7系统
为何size1和size2的sizeof会一样呢?
原因:结构体的sizeof涉及到内存对齐问题
内存对齐的时候整体占的内存一定是最大数据元素的整数倍,比如说第一个里面最大的是整形(4字节),那么整体的内存一定是4n个字节。但不一定是4元素个数。
下面看一下第一个size:a占4个字节,没什么问题,然后接下来4个字节先放上一个char,还剩3个字节,能放下short,所以char和short公用一个四字节块,虽然尾部的一个字节没有用。
第二个size:a占4个字节,然后接下来4个字节放两个char和一个short刚刚好。
所以size1和size2的sizeof在同一编译环境下是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值