首页 > 代码库 > 建立C++内存管理的层次感

建立C++内存管理的层次感

与其他语言相比,C++最强大的一面就是赋予了程序员管控内存及其其他资源的能力,尤其是能够通过使用标准库容器来进行有选择地进行自动化内存管理。但是,对于C++入门者而言,一提及内存管理,大脑便闪现出了new/delete如何成对使用,如何防止内存泄露,仅此而已,至于其他,一片空白。

其实,C++对内存的管控可以有更高的层次,那些new/delete只是各种不同层次中较为低级的一层。看看下图便知:


1. 操作系统提供了最为基础的内存分配服务。这个底层的分配策略及其特性可能根据操作系统平台的不同而有很大的差异,而且这一层内存管理是最可能受到硬件相关的制约的。

2. 编译器的默认运行时库也会建立它自己的内存分配服务。这一层的做法,通常是一次性从操作系统内核中申请出一大块内存,然后再“零售”给它的使用者,即它上层的“客户”。

3. STL容器和allocator进而利用运行时库的接口来实现他们自己的策略和优化。另外,我们也可以自己造出自己需要的内存分配器,即自己的内存池。你可以让STL容器不使用默认的allocator,而使用你自己定义的内存池来分配内存。

最后,如果你从来不使用内存池或内存分配器,而直接使用new/delete去管理自己的内存的话,那么,这种行为也属于在运行时库之上的调用。你并未做任何优化管理,你的分配效率完全取决于运行时库的实现。

有了如上图的内存分配层次感,我相信能让你更加清楚地知道你是如何经历了一番颠簸而得到内存的,也会让你下意识的想一想自己的代码中内存管理是否是最优的。

建立C++内存管理的层次感