C类的大小

新手上路,请多包涵

这是打印不同类大小的代码

#include <iostream>

using namespace std;

class EmptyClass
{
};

class AbstractClass
{
  public:
          virtual void funcOne() = 0;
          virtual void funcTwo() = 0;
};

class NotAbstrClass
{
  public: int virtFunc( int );
};

class MixClass
{
  public:
          virtual void clFunc( int );
          static int i;
          int j;
};

int main()
{
    // Print size of class or class objects
    cout<<"Size of empty class: "<< sizeof(EmptyClass)<<endl;
    cout<<"Size of Abstract class :"<< sizeof(AbstractClass)<<endl;
    cout<<"Size of Non Abstract class: "<< sizeof(NotAbstrClass)<<endl;
    cout<<"Size of Mix class: "<< sizeof(MixClass)<<endl;
    return 0;
}

程序在 C++11 编译器上的输出是

Size of empty class: 1
Size of Abstract class :4
Size of Non Abstract class: 1
Size of Mix class: 8

我明白为什么 Empty 类的大小为 1 Size of empty class object 。对于抽象类,对象存储了一个用于实现虚函数调用机制的指针。但是其他类对象(NotAbstrClass 和 MixClass)的大小呢?

原文由 nurabha 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 521
1 个回答

根据 Girish Shetty 的说法:

有许多因素决定了 C++ 中类的对象的大小。

这些因素是:

  • 所有非静态数据成员的大小
  • 数据成员的顺序
  • 字节对齐或字节填充
  • 其直接基类的大小
  • 虚函数的存在(使用虚函数的动态多态性)。
  • 正在使用的编译器
  • 继承方式(虚继承)

这里有一些相关的网站,我想对你有帮助。

确定类对象的大小: http ://www.cprogramming.com/tutorial/size_of_class_object.html

内存布局: http ://www.phpcompiler.org/articles/virtualinheritance.html

而且,如果您使用 MVSC,您可以使用 -d1reportAllClassLayout 转储解决方案中所有类的所有内存布局,如下所示:

 cl -d1reportAllClassLayout main.cpp

原文由 HappyTran 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏