首页 > 编程语言 > 详细

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

时间:2019-12-02 21:17:19      阅读:64      评论:0      收藏:0      [点我收藏+]

在无意中,我偶然发现了类的长度并不是由函数的类型及个数决定,也并非是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;
}

显示结果:

技术分享图片

 

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

 

 

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

原文:https://www.cnblogs.com/hpf666/p/11972679.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!