1. 堆(heap)
关于操作系统的内存管理的具体内容可以看《深入了解计算机系统》第九章——虚拟存储器。
进程内存分布图如下:
动态内存分布主要发生在heap上,对于每个进程,内核维护一个变量brk,指向heap的顶部。访问超过brk的地址,将会发生错误。
那么heap是什么呢?
heap是一组不同大小的块(block)的集合。每个块就是一个连续的虚拟存储器片(chuank),要么是已分配的,要么是空闲的。
以隐式空闲链表来实现堆为例:
每个块的结构如上图所示,头部、有效荷载和填充。头部说明了块的大小以及是已分配还是空闲。头部以后是malloc请求的有效荷载。那么这样的话,可以讲堆视为一个连续的已分配块和空闲块的序列:

本文详细探讨了C++中的动态内存管理,包括堆的概念、malloc/free与new/delete的使用、malloc过程的深入理解、内存池的优势以及C++ STL的空间配置器。通过对内存分配和释放的解析,阐述了内存管理的关键问题,如空闲块组织、放置、分割和合并。同时,文章指出内存池技术可以提高内存分配效率并减少内存碎片。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



