软件调试笔记39 - 堆和堆检查 : 堆的分配和释放
2017-12-06 13:18
211 查看
当程序调用堆管理器的分配函数向堆管理器申请内存时,堆管理器会从自己维护的内存中分割出一个满足大小的内存块,然后把这个块中允许用户访问部分的起始地址返回给应用程序,这样的块称为Chunk。
HeapAlloc:
CRT分配函数:
无论malloc还是new, 都是通过CRT的堆分配函数间接调用RtlAllocateHeap函数从堆上分配内存。那为什么要通过C运行库的中间函数来间接调用系统的堆分配函数呢?降低编译器和操作系统的耦合度,以及可以借助这些中间函数加入内存检查功能来辅助调试。
释放堆中分配的内存:
解除提交:
HeapAlloc:
CRT分配函数:
无论malloc还是new, 都是通过CRT的堆分配函数间接调用RtlAllocateHeap函数从堆上分配内存。那为什么要通过C运行库的中间函数来间接调用系统的堆分配函数呢?降低编译器和操作系统的耦合度,以及可以借助这些中间函数加入内存检查功能来辅助调试。
释放堆中分配的内存:
解除提交:
相关文章推荐
- 软件调试笔记46 - 堆和堆检查 :CRT堆
- 软件调试笔记37 - 堆和堆检查 : 堆概览
- 软件调试笔记36 - 栈和函数调用: 变量检查和Cookie
- 软件调试笔记38 - 堆和堆检查 : 堆的创建和销毁
- 软件调试笔记47 - 堆和堆检查 :泄漏转储
- 软件调试笔记42 - 堆和堆检查 : 堆的调试支持
- 软件调试笔记48 - 堆和堆检查 :堆常用调试功能
- 软件调试笔记44 - 堆和堆检查 : 堆缓冲区溢出
- 软件调试笔记40 - 堆和堆检查 : 堆的内部结构
- 软件调试笔记45 - 堆和堆检查 :页堆,准页堆
- 软件调试笔记27 - 编译器的调试支持 :编译期检查
- 软件调试笔记41 - 堆和堆检查 : 低碎片堆
- 软件调试笔记43 - 堆和堆检查 : 堆回溯数据库
- 使用CRT调试内存分配堆来找出未释放的内存空间
- TCMalloc的使用与源码剖析之八---------TCMalloc内存分配与释放的管理之内存泄露检查
- 软件调试笔记24 - 编译器的调试支持 :程序构建过程
- 软件构造系列学习笔记(3.1)—————数据类型和类型检查
- 软件调试笔记68 - WinDBG用法详解 :观察栈
- 软件调试笔记18 - 未处理异常和JIT调试
- 软件调试笔记20 - 事件追踪