new、delete、内存分配 的底层原理
分类:
文章
•
2023-12-19 21:54:04
new
- 先调用operator new函数为对象分配空间
- 然后调用构造函数, 初始化对象 (对象也可能会有申请堆空间)

delete
- 先调用对象的析构函数, 是把
对象里可能申请的堆空间
进行释放
- 然后再调用operator delete函数释放
为对象分配的空间
.

实际分配内存的大小
- 调试模式会有额外的灰色模块
- 非调试模式没有额外灰色模块
- 上下cookies(红色部分)是必要的, 他用来记录一些信息便于之后的回收
- VC下申请的内存都是16B的倍数, 需要进行alignment
array new 搭配 array delete

- 因为delete底层实现分为两步, 首先
调用析构函数
, 然后再执行operator delete
- 使用array delete (delete [])的目的是
执行相应次数的析构函数
, 如果不是array delete将只会执行一次析构函数
, 造成对象内部申请的内存空间泄漏
- 之后的operator delete释放的是操作系统为对象分配的空间, 相关信息在上下cookies中, 无论是delete [] 还是 delete 都会正常释放.

侯捷:C++面向对象高级开发