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

本文介绍了C++中的内存管理层次,包括操作系统提供的基础内存分配服务、编译器默认运行时库的内存分配服务、STL容器及allocator的内存管理策略等。文章还探讨了如何通过自定义内存分配器来优化内存管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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


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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值