内存池设计与实现
![afd9bcadb1d8eae41cb07389e9abbc8a.png](https://img-blog.csdnimg.cn/img_convert/afd9bcadb1d8eae41cb07389e9abbc8a.png)
一、前言
作为C++程序员,想必对于内存操作这一块是比较熟悉和操作比较频繁的;
比如申请一个对象,使用new,申请一块内存使用malloc等等;
但是,往往会有一些困扰烦恼着大家,主要体现在两部分:
- 申请内存后忘记释放,造成内存泄漏
- 内存不能循环使用,造成大量内存碎片
这两个原因会影响我们程序长期平稳的运行,也有可能会导致程序的崩溃;
二、内存池
内存池是池化技术中的一种形式。通常我们在编写程序的时候会使用 new delete 这些关键字来向操作系统申请内存,而这样造成的后果就是每次申请内存和释放内存的时候,都需要和操作系统的系统调用打交道,从堆中分配所需的内存。如果这样的操作太过频繁,就会造成大量的内存碎片进而降低内存的分配性能,甚至出现内存分配失败的情况。
而内存池就是为了解决这个问题而产生的一种技术。从内存分配的概念上看,内存申请无非就是向内存分配方索要一个指针,当向操作系统申请内存时,操作系统需要进行复杂的内存管理调度之后,才能正确的分配出一个相应的指针。而这个分配的过程中,我们还面临着分配失败的风险。
所以,每一次进行内存分配,就会消耗一次分配内存的时间,设这个时间为 T,那么进行 n 次分配总共消耗的时间就是 nT;如果我们一开始就确定好我们可能需要多少内存,那么在最初的时候就分配好这样的一块内存区域,当我们需要内存的时候,直接从这块已经分配好的内存中使用即可,那么总共需要的分配时间仅仅只有 T。当 n 越大时,节约的时间就越多。
---引用来源互联网
三、内存池设计
![d019e43c098f3a7d3c19b5d49837d001.png](https://img-blog.csdnimg.cn/img_convert/d019e43c098f3a7d3c19b5d49837d001.png)
内存池设计实现中主要分为以下几部分: