c++中关于类的长度的猜想

在无意中,我偶然发现了类的长度并不是由函数的类型及个数决定,也并非是2的倍数、4的倍数。

在翻阅资料中,我得出了一些我认为可能的猜想。

我们先来看一串代码

 1 #include<iostream>
 2 using namespace std;
 3 class A
 4 {
 5     int a;
 6 };
 7 class B
 8 {
 9     double b;
10 };
11 class C
12 {
13     int a;
14     double b;
15 };
16 int main()
17 {
18     cout<<"A:"<<sizeof(A)<<" B:"<<sizeof(B)<<" C:"<<sizeof(C);
19     return 0;
20 }

可以看到class C的成员就是class A成员与classB成员的集合,我们来运行一下看看各个class的长度。

可见,class C的长度不等于class A+class B的长度。

这涉及到内存的储存方式。

通过各种研究,我认为内存储存的形式是以"矩形"的方式储存的。

(因不同书写顺序而有不同的分配空间方式)

 

这就可以解释为什么class C的长度为什么要多出4个字节了。

当一个int类型的数据与一个double类型的数据相遇时,其内存空间无法形成一个矩形,所以会额外分配给int类型4个字节。

如果写两个int类型的话就可以与double组成一个矩形,这样就不用担心空间分配过多问题。

#include<iostream>
using namespace std;
class A
{
    int a;
    int c;
    double b;
};
int main()
{
    cout<<"A:"<<sizeof(A);
    return 0;
}

显示结果:

 总结:类的空间大小是由数据的类型及个数决定的,其储存空间总为一个”矩形“。

猜你喜欢

转载自www.cnblogs.com/hpf666/p/11972679.html