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

运行结果:
这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值