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

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

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

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.9

TensorFlow-v2.9

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值