說明:
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;
}