内存池的概念以及应用

Posted guoyu1024

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存池的概念以及应用相关的知识,希望对你有一定的参考价值。

    内存池,简单的讲就是,内存不由系统管理,而由应用程序自己或另行委托第三者管理的内存空间。通俗点说就是,所谓内存池就是应用程序从系统那里批发来的内存空间。对于使用量较大且需要频繁申请和释放内存的应用程序来说,使用内存池会减少运行时间,而对于系统来讲,批发内存可以有效减少零售所带来的内存碎片问题,从而提高内存空间的利用率。

  (1) 在c++程序设计中,一般在没有什么特殊要求时,人民都是使用new 与 delete 来分配和释放动态内存,这几乎时直接在与操作系统的内存管理系统进行交互。当应用程序需要的动态内存很小的时候,这不是什么问题,但如果应用程序需要的动态内存不仅量很大,而且对动态内存的申请和释放又极其频繁,那么问题就很大。

     操作系统对系统内存的管理是一件极其繁琐的事,用户对动态内存的每一次请求都要经过一道繁琐的手续才能获得成功,就是销毁内存也是一件不太容易的事,因为每次系统的内存管理系统都要对内存的使用情况进行整理和记录。简单的说就是,每次系统的内存管理系统来使用内存,既费时又费力。那么解决这个这个问题的方法就是“批发”,即一次申请一大块内存,把这大块内存作为应用程序的内存储备,每当需要一小块内存的时候就到这个储备的内存中来取用,不用了就归还给这个内存,程序就快捷多了。总有一些意外会使初始申请的这块内存储备也不够,那么就再申请一块内存,然后把它与原有的内存块用链表连接起来组成更大的内存储备。这种由应用程序储备的内存就叫做内存池。

    使用内存池另一个好处就是能够有效的防治内存碎片华,因为他总是大块大块的申请内存,因此对于系统内存管理系统来讲,这是个省时省力的好事。

以上是关于内存池的概念以及应用的主要内容,如果未能解决你的问题,请参考以下文章

获取应用程序池的内存使用情况

每个应用程序池的内存使用情况

应用安全一个轻量级内存池的实现与细节

从内核源码看 slab 内存池的创建初始化流程

如何设计一个简单内存池

每日一点内存池,进程池,线程池