CPP内存占用和sizeof计算大小的问题

1.先来个最简单的

blob.png

这里

blob.png

占用1字节作为占位。一个char 填充。当然还有空字节的。为0。

这里要说明 构造函数、析构函数和一般函数都放在代码区sizeof是不计算其占用内存的。

2.虚函数、char和static

blob.png

blob.png

占用4+4+4+8+4 = 24B

这里说明virtual是有指针存放在对象中的占4B。

3.虚继承

class C : public virtual A

{

    //只是举个例子

}

这里sizeof(C) 如果是在占位1字节的编译器。则 = 8。

虚继承会产生一个虚表指针。加1字节的char 填充。还有alignment对齐字节数为4的倍数(32位)

PS:虚继承只保留一份重复的实体。这里重复的实体是填充的1Byte。(当然这里没有重复,只是做个笔记)

static变量是不在对向占用内存的。static占用全局变量区内存。static在 data segment。

(这里有人说static是在代码区,这里应该是不对的。有兴趣可以自己试一试看看)


这里截一个linux系统的内存结构图

blob.png

static应该存放在data段。text段为代码区。实例化的对象存放在堆栈(new 的在堆)。

也就是说class中用sizeof计算内存应该计算的是:

virtual函数、成员变量。还有就是字节对齐。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值