boost学习之pool
来源:互联网 发布:淘宝鞋主页设计图片 编辑:程序博客网 时间:2024/04/28 20:17
#include<boost/pool/pool.hpp>#include <boost/pool/object_pool.hpp>#include <boost/pool/single_poolton.hpp>#include <iostream>#include <string>#include <assert.h>using namespace std;using namespace boost;class 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(int argc, char** argv){ //简单内存池,只能作用域int long 简单的 pool<> p1(sizeof(int));//0m~@个m~O0m~H~Fm~E~Mintm~Z~Dm~F~E0m~X0m| //pool分配内存失败不检测异常,所以使用应该检测 int* p =(int*)p1.malloc(); assert(p1.is_from(p)) ;// m~X[0m~Nm~F~E0m~X0m| 中m~H~Fm~E~Mm~H0m~Z~D p1.free(p); //m~[| 为0m~Km~][0m~Am~T[0m~Lm~I~@以m~G~Jm~T[0m~L0m~Bm~^~\m~F~E0m~X0m| 大0m~O0m~_m~Z~D0m~]0m~Lm~O0m~Mm~G~Jm~Tm for(int i = 0; i< 100; i++) { p1.ordered_malloc(10);//m~@~@m~G[0m~\m~T0m~_~_m~P~Nm~G0m~J0m~G~Jm~Tm } //object_pool object_pool<demo_class> pde;//对象内存池 demo_class* pdc = pde.malloc(); //分配原始内存块,分配时并不调用构造函数,请注意 assert(pde.is_from(pdc)); assert(pdc->a != 1); //指向的内存未做初始化 pdc =pde.construct(7,8,9); //构造一个对象,可以传递参数,和构造函数保持一致 assert(pdc->a == 7); //推荐直接只用construct,//不是先malloc,再construct //construct 默认最多接受3个参数 object_pool<string> ops; for(int i=0 ; i<10;i++) { string *s = ops.construct("hello object");//construct内部会自己malloc cout << *s << endl;//出作用域后自动释放 } //single_pool 类始于static的模式,需要手动释放内存 //single_pool 模板第一根参数为分配的单价类型,第二个参数为分配的大小 typedef singleton_pool<demo_class, sizeof(demo_class)> sps; //单件内存池定义 demo_class* dc1 = (demo_class*)sps::malloc(); //全部采用静态调用 assert(sps::is_from(dc1)); sps::release_memory(); return 0;}