在无意中,我偶然发现了类的长度并不是由函数的类型及个数决定,也并非是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; }
显示结果:
总结:类的空间大小是由数据的类型及个数决定的,其储存空间总为一个”矩形“。
原文:https://www.cnblogs.com/hpf666/p/11972679.html