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个字节。

C++中结构体类型(或则类类型)的大小,布布扣,bubuko.com

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

上一篇:大数据和云计算技术周报(第8期):NoSQL特辑


下一篇:C++中的强制类型转换