电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

C++内存池(代码)

C++内存池(代码)_第1页
1/7
C++内存池(代码)_第2页
2/7
C++内存池(代码)_第3页
3/7
内存池的主要作用,简单地说来,便是提高内存的使用效率。堆内存的申请与释放(new/delete 及 malloc/free),涉及复杂的内存分配算法,相比由简单CPU 指令支持的栈内存的申请与释放,则是慢上了数量级。另一方面,栈的大小是有限制的,在需要大量内存的操作时,堆的使用是必要的。当然,频繁地申请与释放堆内存,效率是很低的,这也就是内存池出现的原因。 类似 std::vector 容器,在向 vector 里添加一个元素之前,该容器往往提前申请了一大块内存,实际添加时就只需要拿出其中一小块来使用,不用每添加一个都使用new 一次。内存池所做的,也就是一次申请一块大内存,然后再小块小块地拿出来用:一次申请 NM 大小的内存,必然比 N 次申请 M 大小的内存要快,这就是内存池高效的简单解释。 一般来说,内存池可以按两种维度划分:单线程与多线程,可变大小和固定大小。其中最简单的单线程固定大小的内存池。这类内存池只考虑单线程的程序,分配与回收的对象都是固定大小的。这个简单的内存池类模板声明如下: template class SimpleMemPool { private: #pragma pack(push, 1) union ObjectChunk { ObjectChunk * next; char buf[sizeof(T)]; }; struct MemBlock { MemBlock* next; ObjectChunk chunks[BaseSize]; }; #pragma pack(pop) SimpleMemPool(const SimpleMemPool &) ; MemBlock * head; ObjectChunk * freeChunk; public: SimpleMemPool(); ~SimpleMemPool(); T* New(); void Delete(T* t); }; template class SimpleMemPool { private: #pragma pack(push, 1) union ObjectChunk { ObjectChunk * next; char buf[sizeof(T)]; }; struct MemBlock { MemBlock* next; ObjectChunk chunks[BaseSize]; }; #pragma pack(pop) SimpleMemPool(const SimpleMemPool &) ; MemBlock * head; ObjectChunk * freeChunk; public: SimpleMemPool(); ~SimpleMemPool(); T* New(); void Delete(T* t); }; 该内存池类模板实例化之后,产生一个只用于申请对象T 的内存池。创建对象的方法是 T* New(),删除对象的方法是 void Delete(T *)。类模板中还定义了两个数据结构及两个成员变量,还禁止了内存池的拷贝构造。对于这种内存池,它...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

C++内存池(代码)

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部