关于C++的对象的存储空间

C++对象的存储空间由非静态成员变量总和还有编译器为了CPU计算做出的数据对齐处理和支持虚函数所产生的负担的总和所决定的。

1.空类的情况下的空间大小?

#include <iostream>
using namespace std;
class Box{
};
int main(){
    Box boxObj;
    cout<<sizeof(boxObj)<<endl;
    return 0;
}

输出为1,按道理应该是0,但是声明对象时必须在内存中占有一定的空间。C++中每个空类型的实例占用1Byte。

2.只有成员变量的类的存储空间

...
Class Box{
    int length,width,heigth;
};
...

输出为12Byte,因为定义了3个int型变量,每个int型占用4Byte;

3.在2的基础上加上静态成员变量;

...
Class Box{
    int length,width,heigth;
    static int count;
};
...

输出为12Byte,静态数据成员不占用对象的内存空间;

4.加上虚析构函数

#include <iostream>
using namespace std;
class Box{
    box{};
    virtual ~Box(){}; //虚函数在类名前面加上一个~
}
int main(){
    Box boxObj;
    cout<<sizeof(boxObj)<<endl;
    return 0;
}

输出为8,主要是指向虚函数表的指针的大小,这个大小随着电脑的位数而决定

定义一个成员函数,也不占用空间,函数代码是存储在对象空间之外的,定义多个对象这些对象的成员函数对应的是同一个函数代码段

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值