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;
	
}
原文地址:https://www.cnblogs.com/liuweilinlin/p/3261089.html