C++类的大小
Size of C++ classes
本文关键字:C++ 更新时间:2023-10-16
这是打印不同类别大小的代码
#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空类对象的大小。对于抽象类,对象存储用于实现虚拟函数调用机制的指针。但是其他类对象(NotAbstratrClass和MixClass)的大小呢?
NotAbstrClass
没有数据成员,所以它也是一个空类。由于类的大小不能为零,因此可以得到与EmptyClass
相同的处理。
MixClass
具有一个虚拟函数和一个非静态数据成员。这些(vptr
和int
)似乎在您的平台上各占4个字节,因此大小为8个字节。
根据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
相关文章:
- 没有找到相关文章