这是打印不同类大小的代码
#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 许可协议
根据 Girish Shetty 的说法:
这里有一些相关的网站,我想对你有帮助。
确定类对象的大小: http ://www.cprogramming.com/tutorial/size_of_class_object.html
内存布局: http ://www.phpcompiler.org/articles/virtualinheritance.html
而且,如果您使用 MVSC,您可以使用
-d1reportAllClassLayout
转储解决方案中所有类的所有内存布局,如下所示: