简单来说内存池预先分配了一块大的内存空间,然后在其中使用某种算法高效快速的自定制内存分配。pool库包含四个组成部分,最简单的pool,分配类实例的object pool,单件内存池singleton_tool和用于标准库的pool_alloc.为了使用pool组件,需要包含<boost/pool/pool.hpp>头文件。操作函数:pool的构造函数接受一个size_type类型的整数request_size,指示每次pool分配内存块的大小成员函数get_request_size()获得request_size值析构时,pool将自动释放它所持有的所有内存。malloc()从内存池中任意分配一个内存块,类似C中的malloc().返回指向内存的void*指针,失败返回0.ordered_malloc(),malloc时从内存池中任意分配一个内存块,而order_malloc()则在分配的同时合并空闲块链表.free(),与malloc相对应,手动释放之前申请的内存(这些内存必须是从这个内存池中申请的),通常情况下内存池会自动管理内存分配,不必调用free(), 除非你认为内存池的空间已经不足。is_from()测试是否是从这个内存池中分配出去的,返回一个bool值.release_memory(),让内存池释放所有未被分配的内存,已分配的内存块不受影响。purge_memory(),则强制释放pool持有的所有内存,不管内存是否被分配。e.gpool<> p1(sizeof(TestClass)); cout << p1.get_requested_size() << endl; TestClass *p = (TestClass*)p1.malloc(); if (p == nullptr) { cout << "p == nullptr" << endl; return; } if (p1.is_from(p)) { cout << "p is form p1" << endl; } p1.free(p);object_poolobject_pool是用于类实例的内存池,与pool类似,object_pool中也可使用malloc()、free()、is_from()等函数,但不会调用构造函数和析构函数。因此,object_pool提供了construct()和destroy()函数。需要包含<boost/pool/object_pool.hpp>头文件同样引用boost命名空间e.gclass TestClass { public: TestClass(int data){ cout << "TestClass()" << endl; } ~TestClass(){ cout << "~TestClass()" << endl; } private: int data; }; void func() { object_pool<TestClass> p1; TestClass *tc1 = p1.construct(1); //调用TestClass的构造函数 } //p1自动释放内存,会调用TestClass的析构函数
原文地址:http://blog.csdn.net/aspnet_lyc/article/details/43313447