C++静态内存池

C++静态内存池

为何需要内存池

在我们为对象分配内存时,我们的编译器会自动在对象对应的内存上下各分配一个cookie,用来描述对象的大小信息,方便我们进行释放。

在我们大量进行内存分配是时候,过多的这些cookies会影响我们的性能。所以,我们希望对于一种对象,我们先分配一大块紧凑的内存(chunk),然后将大量的同种对象存储在这大块内存chunk中。每次需要一个这种对象时,我们不需要再次new一个(这样会创建新的cookie),而是直接从之前申请的那个大块内存中拿就可以。这样,我们就避开了cookie。这个大块的内存,就是我们的“池”。

如何实现内存池

我们申请了chunk之后,需要将其分割成一个个小块来分别存储每一个对象,而每个小块的大小需要可以容纳该对象。在实现时,我们通常根据具体应用场景以及经验,手动指定小块的大小。

每一个空闲的,未分配的小块之间使用单链表进行连接。每个小块就是单链表的一个节点node。当将这个小块被使用到时,就将它移除链表。回收时,将它重新加入链表。

#ifndef _StaticAllocator
#define _StaticAllocator
#include <iostream>
#include <cstddef>  // for std::size_t
#include <new>     // for std::bad_alloc

class StaticAllocator {
public:
    static constexpr std::size_t POOL_SIZE = 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值