C++常识——C++类的大小

说明:
1.非纯虚函数的所有成员函数都不占类的大小
2.纯虚函数由于需要有一个指针指向虚表,因此会生成一个虚指针,占用4个字节
3.成员变量根据对齐规则不同而占用不同的内存
4.静态函数以及静态成员变量都不占用类的大小
5.空类占用1个字节

#include 
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;
}

运行结果:
C++常识——C++类的大小_第1张图片

你可能感兴趣的:(C++基础-常识,C++,sizeof,class)