六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 28|回复: 0

C++内存管理变革(4):boost::object_pool与gc allocator

[复制链接]

升级  16.15%

427

主题

427

主题

427

主题

探花

Rank: 6Rank: 6

积分
1323
 楼主| 发表于 2013-1-26 13:52:24 | 显示全部楼层 |阅读模式
本文已经迁移到:http://cpp.winxgui.com/cn:gc-allocator-and-boost-object-poolC++内存管理变革(4): boost::object_pool

许式伟 (版权声明)
2007-4-21
这篇文章拖的有点久了。NeutralEvil 在3个月之前就在催促我继续写了。只是出于WinxGui完整性的考虑,我一直在刻意优先去补充其它方面的文章,而不是让人去误会WinxGui是一个内存管理库了。:)
言归正传。我们在内存池(MemPool)技术详解已经介绍了boost::pool组件。从内存管理观念的变革来看,这是是一个传统的MemPool组件,尽管也有一定的改进(但只是性能上的改进)。但boost::object_pool不同,它与我在C++内存管理变革强调的观念非常吻合。可以认为,boost::object_pool是一种不通用的gc allocator组件。
我已经多次提出gc allocator的概念。这里仍然需要强调一下,所谓gc allocator,是指具垃圾回收能力的allocatorC++内存管理变革(1)中我们引入了这个概念,但是没有明确gc allocator一词。
boost::object_pool内存管理观念

boost::object_pool的了不起之处在于,这是C++从库的层次上头一次承认,程序员在内存管理上是会犯错误的,由程序员来确保内存不泄漏是困难的。boost::object_pool允许你忘记释放内存。我们来看一个例子:
<div class="entry">class X{…};

voidfunc()
{
boost::object_pool
<X>alloc;

X*obj1=alloc.construct();
X
*obj2=alloc.construct();
alloc.destroy(obj2);
}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表