boost之内存池
讲到内存池我们会想到对对象进行动态分配的过程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;
}
一切源于对计算机的热爱

浙公网安备 33010602011771号