[C++雜談]——C++類的大小

說明:
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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章