使用sizeof得到struct大小的规则

在vchelp上ll199(赵小雅)的耐心教导下,我终于明白了使用sizeof来得到struct的原理,首先表示一下感谢。

首先拉来看个例子:

struct test
{
 char a;
 int b;
};
int main()
{
 int nSize = sizeof(test);
    return 0;
}

在使用vc编译器默认设置下得到的nsize是8,而不是5.为什么要这样呢?

原来在cpu寻址是是8的倍数的地址是最容易找到的,所以在vc默认编译情况下,都会把结构体按8字节对齐,这样就可以提高了编译出来效率。

vc在project->setting->c/c++中的struct member alignment中可以设置结构体补齐方式,默认情况下是8,如果改成1的话,上面的sizeof得到的结果就是5了。

那么现在我们还是用默认的8字节方式,把int b改成short b,得到的结果是多少呢?哈,是4.

原来struct的对齐机制里面还有另外一个规则就是首先计算结构体内所有基础类型的长度,最大的长度如果小于vc设置的对齐长度的话,就按最大长度作为结构体的对齐方式。如上面改成short以后,结构体内最大对齐长度是2(short),所以最终的结构体是按2字节来补齐的,而不是默认的8字节。

最后发表一下感想,大家多到vchelp去逛逛,可以学到不少东西:)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值