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

  • Post author:
  • Post category:其他




定义类时分配的内存




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!



版权声明:本文为suyunzzz原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。