讲到内存池我们会想到对对象进行动态分配的过程new包含三个过程
1.使用operator new分配内存
2.使用placement new 初始化
3.返回内存地址。
分配内存可以分解成分配内存和获取内存两步,只是一般在一步里进行。
一.使用pool类,获取已经分配了的内存
#include <iostream> #include <boost/pool/pool.hpp> using namespace std; using namespace boost; int main() { pool<> p1(sizeof(int)); int *p = (int*)p1.malloc();//返回内存 if (p1.is_from(p) == true) { cout << "hello world" <<endl; } return 0; }
二.object_pool从pool继承可以对进行分配的自定义类型对象初始化
#include <iostream> #include <boost/pool/object_pool.hpp> using namespace std; using namespace boost; struct demo_class { public: int a,b,c; demo_class(int x = 1,int y = 2,int z=3):a(x),b(y),c(z){} }; int main() { object_pool<demo_class> p1; demo_class *p = p1.malloc(); cout << p->a <<endl; p = p1.construct(7,8,9); cout << p->a <<endl; return 0; }
三.singleton_pool类似于单实例模式
#include <iostream> #include <boost/pool/singleton_pool.hpp> using namespace std; using namespace boost; struct pool_tag { }; typedef singleton_pool<pool_tag,sizeof(int)> sp1; int main() { int *p = (int*)sp1::malloc(); sp1::release_memory();//释放内存池中所有未被分配的内存 return 0; }