这里写目录标题
定义类时分配的内存
complex 类的调试模式下
包含两个double 4字节
new 一个complex对先分配内存,在内存中的分布如下:
解释一下:
首先,两个double会得到8个byte,也就是绿色部分(这里比较迷惑,一个double不应该是占据8个byte的吗?任意类型的指针是占据4个byte的,不知道这里是不是当做指针了)。
然后,在调试模式下会得到灰色部分的内存(32+4)
第三,上下各两个红色的“小饼干”代表是类
这个时候加起来就是52个byte了,但是应该是16的倍数,距离52最近的16的倍数(比52大的)为64,所以最后加上3个pad,凑成64.
complex类的非调试模式下
string类的调试模式下
string类的非调试模式下
complex类数组分配内存
解释一下:
3个复数:8*3(灰色)
调试模式:32+4(黄色)
上下两个小熊饼干:4*2(两头的白色)
存放元素的个数:4(白色)
pad凑80:4*2(蓝色)
string类数组的分配内存
array new一定要搭配array delete
忘记使用array delete 会造成内存泄漏,但是不是我们想的那样在string类分配的内存空间内部泄漏,而是图上这种形式,
因为string类内部的成员是指针,如果不用delete[] p,那么会导致除第一个之外的char* 指向的内存不会清空
.
如果是complex类的话,不调用delete[] p是没关系的,因为内部成员都存放在了系统为这个类分配的内存上。
为了养成一个好习惯,只要array new 就要array delete!
系统为这个类分配的内存上。
为了养成一个好习惯,只要array new 就要array delete!