说明:
1.非纯虚函数的所有成员函数都不占类的大小
2.纯虚函数由于需要有一个指针指向虚表,因此会生成一个虚指针,占用4个字节
3.成员变量根据对齐规则不同而占用不同的内存
4.静态函数以及静态成员变量都不占用类的大小
5.空类占用1个字节
#include <iostream>
using namespace std;
class VirtualClass
{
virtual void size() = 0;
private:
};
class intClass
{
private:
int m_int; //0-3
char c; //4-7
int m_int2; //8-15
double db; //16-23
char c2; //24-31 (总共占用32字节,8字节对齐!!)
};
class staticVariableClass
{
private:
static int size();
};
class staticFuncClass
{
private:
static int m_int;
};
class emptyClass {
};
#define OUT_CLASS_SIZE(_Class) do{\
cout << #_Class << " size is:" << sizeof(_Class) << endl;\
}while (0);
int main()
{
OUT_CLASS_SIZE(VirtualClass); //4 ——纯虚函数占用4个字节
OUT_CLASS_SIZE(intClass); //32——非静态成员变量根据内存对齐方式占用内存
OUT_CLASS_SIZE(staticVariableClass); //1 ——静态成员变量不占用类大小
OUT_CLASS_SIZE(staticFuncClass); //1 ——静态成员函数不占用类大小
OUT_CLASS_SIZE(emptyClass); //1 ——空类占用1个字节
getchar();
return 0;
}
int staticVariableClass::size()
{
return 0;
}
运行结果: