【侯捷P8】定义类时分配的内存

定义类时分配的内存


complex 类的调试模式下

包含两个double 4字节

new 一个complex对先分配内存,在内存中的分布如下:

image-20200529120542434

解释一下:

首先,两个double会得到8个byte,也就是绿色部分(这里比较迷惑,一个double不应该是占据8个byte的吗?任意类型的指针是占据4个byte的,不知道这里是不是当做指针了)。

然后,在调试模式下会得到灰色部分的内存(32+4)

第三,上下各两个红色的“小饼干”代表是类

这个时候加起来就是52个byte了,但是应该是16的倍数,距离52最近的16的倍数(比52大的)为64,所以最后加上3个pad,凑成64.

complex类的非调试模式下

image-20200529121154518

string类的调试模式下

image-20200529121303855

string类的非调试模式下

image-20200529121320319

complex类数组分配内存

image-20200529121825299

解释一下:

3个复数:8*3(灰色)

调试模式:32+4(黄色)

上下两个小熊饼干:4*2(两头的白色)

存放元素的个数:4(白色)

pad凑80:4*2(蓝色)

string类数组的分配内存

image-20200529122155499

array new一定要搭配array delete

image-20200529122250782

忘记使用array delete 会造成内存泄漏,但是不是我们想的那样在string类分配的内存空间内部泄漏,而是图上这种形式,因为string类内部的成员是指针,如果不用delete[] p,那么会导致除第一个之外的char* 指向的内存不会清空.如果是complex类的话,不调用delete[] p是没关系的,因为内部成员都存放在了系统为这个类分配的内存上。

为了养成一个好习惯,只要array new 就要array delete!

系统为这个类分配的内存上。

为了养成一个好习惯,只要array new 就要array delete!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tech沉思录

点赞加投币,感谢您的资瓷~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值