C++中结构体类型(或则类类型)的大小

我们先观察下面的这个结构体,并用sizeof()函数去求该类型的大小。

struct TS
{
  int ma;
  double mb;
  char mc;
};

可能很多人会想该类型的大小就是4个字节+8个字节+1个字节 = 13个字节。
可是但实际上结果却是输出24个字节。

size_t len;
	len = sizeof(TS );//作用于类型名
	cout<<len<<endl;//输出24
	

先别想太多为什么,我们接着看下面的这个结构体,并也是求该结构体类型的大小。

struct TC
{
  double mb;
  int ma;
  char mc;
};
如果你之前从未深思过该问题,你可能会觉得结构体TC和结构体TS没有区别啊,TC类型的
大小应该和TS一样也是24个字节,但是事实上TC类型却是16个字节。

size_t len;
	len = sizeof(TC );//作用于类型名
	cout<<len<<endl;//输出16
	
看到这个结果可能我们都已经明白了,在C++中结构体类型或者类类型的内存分配规律,
其实在一个结构体,编译器在分配存储空间时,总是以该结构体的所有成员中成员类型存储空间最大的值为
基本单位去分配空间的。
例如:在TS中存储空间最大的成员类型为double类型,其大小值为8,所以以8为基本单位去
分配空间,先为ma分配8个字节,存储ma后多出4个字节,但是mb确实需要8个字节,所以必须再为mb分配
8个字节,最后再为mc,分配8个字节,所以一共是24个字节。
而在TC中先为分配8个字节,刚好够用,再为ma分配8个字节,多出4个字节,但是mc却只需要1
个字节,所以也多出的4个字节已经够mc用了,所以不需要再额外分配,一共是16个字节。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值