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

来源:互联网 发布:如何学java高级工程师 编辑:程序博客网 时间:2024/06/05 07:30

我们先观察下面的这个结构体,并用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 0
原创粉丝点击