BOOST内存管理(一) --- boost::object_pool
看看实际例子:
#include "stdafx.h"
#include <malloc.h>
#include <boost/pool/object_pool.hpp>
#include <boost/serialization/singleton.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/timer.hpp>class ObjectMgr;
typedef boost::unique_lock<boost::mutex> WriteLock;
typedef boost::serialization::singleton<ObjectMgr> ObjectMgrFactory;struct myObject
{int a;char b;myObject (){a=0;b=0;}
};class ObjectMgr
{
public:myObject* CreateNewObject(myObject o){WriteLock wl(mt);return pool.construct(o);}void free(myObject *po){WriteLock wl(mt);if (pool.is_from(po)){pool.destroy(po);}}private:boost::object_pool<myObject> pool;boost::mutex mt;
};int _tmain(int argc, _TCHAR* argv[])
{boost::timer t;for (int i=0;i<20*1024*1024;i++){myObject to;to.a = 2*i;to.b = i;//方式一: objectpool debug:14.553秒 260兆 release:0.674秒 260兆//ObjectMgrFactory::get_mutable_instance().CreateNewObject(to);//方式二: new debug:14.91秒 1420兆 release:11.815秒 610兆//myObject *pmyObject = new myObject(to);//方式三: malloc debug:14.926秒 1400兆 release:11.737秒 630兆//myObject *pmyObject = (myObject *)malloc(sizeof(myObject));//方式四: pool debug:59.235秒 0兆 release:22.116秒 630兆boost::pool<> pObj(sizeof(myObject));myObject *pmyObject = (myObject *)pObj.malloc();}std::cout << "use time "<<t.elapsed()<<std::endl;return 0;
}
总结:
1.无论哪种方式的申请内存,占用空间都比有用空间大点,实际有用空间:8字节 * 20*1024*204 = 160兆
2.new和malloc无论在debug还是release下,占用内存资源和CPU资源都差不多
3.使用boost中的object_pool无论从内存消耗还是从速率上来讲都比new和malloc好,尤其是使用release的时候分配资源的速度
4.在操作大数据的时候,最好使用boost中的boost_pool
BOOST内存管理(一) --- boost::object_pool相关推荐
- BOOST内存管理(二) --- boost::pool
Boost库的pool提供了一个内存池分配器,用于管理在一个独立的.大的分配空间里的动态内存分配.Boost库的pool主要适用于快速分配同样大小的内存块,尤其是反复分配和释放同样大小的内存块的情况. ...
- linux boost内存池,C++ boost库教程之内存池
Boost Pool 库提供了一个内存池分配器,它是一个工具,用于管理在一个独立的.大的分配空间里的动 态内存.当你需要分配和回收许多不的对象或需要更高效的内存控制时,使用内存池是一个好的 解决方案 ...
- C++大法:举世闻名之BOOST大法精华浅析(三)内存管理库(小白piao分享)
文章目录 三.内存管理库 3.1 smart_ptr 3.1.1 RAII机制 3.1.2 智能指针 3.1.3 scoped_ptr 3.1.4 scoped_array 3.1.5 shared_ ...
- (六)boost库之内存管理shared_ptr
1.shared_ptr的基本用法 boost::shared_ptr<int> sp(new int(10)); //一个指向整数的shared_ptr assert(sp.unique ...
- boost之内存管理
smart_ptr库概述 计算机系统中资源有很多种,内存是我们最常用到的,此外还有文件描述符.socket.操作系统handle.数据库连接等,程序里申请这些资源后必须及时归还系统,否则就会产生难以预 ...
- Boost学习笔记(一)——Boost使用基础、内存管理
一.Boost使用基础 Boost库的大部分组件(90%左右),不需要进行编译,直接包含头文件即可使用. #include <boost/logic/tribool.hpp> using ...
- linux boost内存池,开源C++函数库Boost内存池使用与测试
[IT168 专稿]Boost库是一个可移植的开源C++函数库,鉴于STL(标准模板库)已经成为C++语言的一个组成部分,可以毫不夸张的说,Boost是目前影响最大的通用C++库.Boost库由C++ ...
- 重写boost内存池
最近在写游戏服务器网络模块的时候,需要用到内存池.大量玩家通过tcp连接到服务器,通过大量的消息包与服务器进行交互.因此要给每个tcp分配收发两块缓冲区.那么这缓冲区多大呢?通常游戏操作的消息包都很小 ...
- boost:进程管理
概述 Boost.Process提供了一个灵活的C++ 进程管理框架.它允许C++ developer可以像Java和.Net程序developer那样管理进程.它还提供了管理当前执行进程上下文.创建 ...
最新文章
- 互联网秒杀设计--转载
- 微信小程序中WebView中原生组件限制问题解析
- 数学大神攻克猜字游戏Wordle,求解算法成绩逼近理论极限,连信息论都用上了...
- 【bzoj3524】【Poi2014】【Couriers】可持久化线段树(主席树)水题
- 【IOC 控制反转】Android 视图依赖注入 ( 视图依赖注入步骤 | 视图依赖注入代码示例 )
- conversation:in Good common
- Winform 自定义窗体皮肤组件
- 多重背包单调队列优化思路_动态规划入门——多重背包与单调优化
- Redis持久化的几种方式——深入解析RDB
- mysql-front5.1的注册码
- 小福利,PMP考试真题刷起来,人人都当项目管理大师!
- 2022年最新京东滑块验证码破解思路(算法过验)
- Maven依赖冲突避坑指北
- 笔记本此计算机到网络出现一个叉,笔记本电脑无线网络不可用并显示红叉的解决方...
- 外卖联盟高级接口 - 美团联盟接口 美团外卖CPS+CPA推广活动推广API接口
- 病毒乱花迷人眼,勿把“VX”当“全信”
- QIIME2进阶五_QIIME2扩增子基因序列多样性分析
- linux centos 查看内存使用情况
- LDAP基础:3:通过389端口对openldap进行操作
- Python抓取第一网贷中国网贷理财每日收益率指数