IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> boost内存池使用 -> 正文阅读

[C++知识库]boost内存池使用

#pragma once
#include <string>
#include <iostream>

using namespace std;

class Custom
{
public:
	Custom(int id);
	~Custom();
	int getid();
private:
	int m_id{ 0 };	
};

class Custom1
{
public:
	//如果使用boost_object管理内存,受限于boost的实现这里的参数个数不要超过4个
	Custom1(int id, string str, int id2)	
		: m_id(id)
	{
	};
	~Custom1() {};
	int getid();
private:
	int m_id{ 0 };
};
#include "Custom.h"

Custom::Custom(int id)
{
	m_id = id;
}

Custom::~Custom()
{
}

int Custom::getid()
{
	return m_id;
}

int Custom1::getid()
{
	return m_id;
}
#pragma once
#include "boost/pool/pool.hpp"
#include "boost/pool/object_pool.hpp"
#include "boost/pool/singleton_pool.hpp"
#include <memory>

namespace wy {
	namespace custompool {
		static boost::pool<> localPool(sizeof(char));

		template<typename N, typename... Args>
		static boost::object_pool<N> localObjPool;

		//从全局单例内存池申请原始数据类型(线程安全)
		struct MyPoolTag{};
		template<typename T>
		static std::shared_ptr<void> wy_new_pod()
		{
			try
			{
				return std::shared_ptr<void>(boost::singleton_pool<MyPoolTag, sizeof(T)>::malloc());
			}
			catch (const std::bad_alloc&)
			{
				return nullptr;
			}
		}

		//从静态全局线程池申请原始数据类型对象(非线程安全)
		static std::shared_ptr<void> wy_new_pod_fast()
		{
			return std::shared_ptr<void>(localPool.malloc());
		}

		//申请静态全局内存池申请类对象(非线程安全)
		template<typename T, typename... Args>
		static std::shared_ptr<T> wy_new(Args... args) 
		{
			try
			{
				return std::shared_ptr<T>(localObjPool<T>.construct(std::forward<Args>(args)...));
			}
			catch (const std::bad_alloc&)
			{
				return nullptr;
			}		
		}
	}
}
// MemoryPool.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>
#include "Custom.h"
#include "ClassPoolTemplate.h"

using namespace std;

const int g_dataSize = 10000;

template<typename T>
void func_pod_fast(vector<std::shared_ptr<T>>& v)
{
    for (int i=0; i < g_dataSize; ++i)
    {
		std::shared_ptr<T> t = std::static_pointer_cast<T>(wy::custompool::wy_new_pod_fast());
		*t = i;
        v.emplace_back(t);
    }
}

template<typename T>
void func_pod(vector<std::shared_ptr<T>>& v)
{
	for (int i = 0; i < g_dataSize; ++i)
	{
		std::shared_ptr<T> t = std::static_pointer_cast<T>(wy::custompool::wy_new_pod<T>());
		*t = i;
		v.emplace_back(t);
	}
}

//受限于boost的是现实,这里的可变参数个数不要超过四个
template<typename T, typename... Args>
void func(vector<std::shared_ptr<T>>& v, Args... args)
{
	for (int i = 0; i < g_dataSize; ++i)
	{
		std::shared_ptr<T> pT= std::static_pointer_cast<T>(wy::custompool::wy_new<T>(i, std::forward<Args>(args)...));
		v.emplace_back(pT);
	}
}

int main()
{
	vector<std::shared_ptr<int>> v;
	vector<std::shared_ptr<double>> v1;
	vector<std::shared_ptr<Custom>> v3;
	vector<std::shared_ptr<Custom1>> v4;
	while (true)
	{
		//singleton_pool	
		func_pod<int>(v);
		for (auto item : v)
		{
			cout << *item << " ";
		}

		cout << "---------------------------------------------------------------\n ";

		//pool
		func_pod_fast(v1);
		for (auto item : v1)
		{
			cout << *item << " ";
		}
        
		//object_pool	
		func<Custom>(v3);
		for (auto item : v3)
		{
			cout << item->getid() << " ";
		}
		cout << "---------------------------------------------------------------\n ";

		//object_pool	
		func<Custom1>(v4, "test", 0);
		for (auto item : v4)
		{
			cout << item->getid() << " ";
		}
		cout << "---------------------------------------------------------------\n ";
	}

    std::cout << "\nHello World!\n";
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 12:43:52  更:2022-03-06 12:47:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:07:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码