• 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;
    }

    显示结果:

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

  • 相关阅读:
    数据结结构学习 赫夫曼树
    C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
    Linux/Unix time时间戳的处理转换函数
    gcc中include文件的搜索路径
    数据结结构学习 2叉树
    C++ 虚函数表解析
    数据结结构学习 线性表
    C#实现MD5加密
    学习的艺术
    C# 3.0实现类本身的方法扩展
  • 原文地址:https://www.cnblogs.com/hpf666/p/11972679.html
Copyright © 2020-2023  润新知