pool的析构函数会释放pool占用的内存。
object_pool (#include <boost/pool/object_pool.hpp>) |
object_pool和pool的区别在于:pool指定每次分配的块的大小,object_pool指定分配的对象的类型,如下所示:
用A * pA = p.malloc()只会分配内存而不会调用构造函数,如果要调用构造函数应该使用A * const t = p.construct();
singleton_pool (#include <boost/pool/singleton_pool.hpp>) |
singleton_pool和object_pool一样,不过它可以定义多个pool类型的object,给它们都分配同样大的内存块,另外singleton_pool提供静态方法分配内存,且不用定义对象,如下所示:
- struct PoolTag{};
- typedef boost::singleton_pool<PoolTag,sizeof(int)> User_pool;
- int * const t = User_pool::malloc();
-
- my_pool::purge_memory(); //用完后释放内存
- pool_allocator (#include <boost/pool/pool_alloc.hpp>)
- pool_allocator基于singleton_pool实现,提供allocator,可用于STL等:
- std::vector<int, pool_allocator<int> > v;
- v.push_back(13);
- boost::singleton_pool<sizeof(int)>::release_memory(); //显式调用释放内存
|
由此可见,Boost确实是一个值得称赞、更值得使用的库,它能为我们提供极大的便利。当需要使用内存池技术时,请考虑Boost。
请记住:
当你需要频繁地分配相同大小的对象,而又苦恼于默认的内存管理函数带来的问题时,内存池技术将是灵丹妙药,它能提高内存操作效率,以及应用程序的鲁棒性。
相关链接:
编写高质量代码:改善C++程序的150个建议(连载1)
编写高质量代码:改善C++程序的150个建议(连载2)
编写高质量代码:改善C++程序的150个建议(连载3)
编写高质量代码:改善C++程序的150个建议(连载4)
编写高质量代码:改善C++程序的150个建议(连载5)
编写高质量代码:改善C++程序的150个建议(连载6)
编写高质量代码:改善C++程序的150个建议(连载7)
编写高质量代码:改善C++程序的150个建议(连载8)
编写高质量代码:改善C++程序的150个建议(连载9)
编写高质量代码:改善C++程序的150个建议(连载10)
编写高质量代码:改善C++程序的150个建议(连载11)
编写高质量代码:改善C++程序的150个建议(连载12)
编写高质量代码:改善C++程序的150个建议(连载13)
编写高质量代码:改善C++程序的150个建议(连载14)
编写高质量代码:改善C++程序的150个建议(连载15)
编写高质量代码:改善C++程序的150个建议(连载16)
编写高质量代码:改善C++程序的150个建议(连载17)