C++对象池技术剖析
对象池就是一定数量已经创建好的对象的集合。
可以事先创建一批对象,放在一个链表中,以后每当程序要新的对象时,都从对象池中获取,每当程序用完该对象后,都把该对象归还给对象池。这样就少了很多的malloc/free操作,在一定程度上提高了系统的性能,尤其在动态内存分配比较频繁的程序中效果尤其明显。
对象池的特征:
1、对象池中有一定数量创建好的对象。
2、对象池向用户提供获取对象的接口和归还对象的接口。
下面是参考网上的资料写的实现代码:
#include<list>
#include<iostream>
using namespace std;template<class T>
class ObjectPool
{list<void *> data_list;
public:void *malloc_data(){if(!data_list.empty()){list<void *>::iterator it=data_list.begin();void *p=*it;data_list.pop_front();return p;}else{void *p=malloc(sizeof(T));return p;}}void free_data(void *p){data_list.push_back(p);}
};
class Object{
public:int value;Object(int a):value(a){cout<<"Object("<<a<<")called"<<endl;}~Object(){cout<<"~Object("<<value<<")called"<<endl;}static ObjectPool<Object> pool_;void *operator new(size_t size){return pool_.malloc_data();}void operator delete(void *p){pool_.free_data(p);}
};
测试程序:
ObjectPool<Object> Object::pool_;
int _tmain(int argc, _TCHAR* argv[])
{Object* o1=new Object(1);Object* o2=new Object(2);delete o1;delete o2;return 0;
}
上述代码,实现了一个简单的对象池,更深入的解释会在后续代码中实现。
转载于:https://www.cnblogs.com/fistao/archive/2013/04/09/3011005.html
C++对象池技术剖析相关推荐
- 面试官问:对象池技术了解吗?apache common pool2呢?
欢迎关注方志朋的博客,回复"666"获面试宝典 对象池顾名思义就是存放对象的池,与我们常听到的线程池.数据库连接池.http连接池等一样,都是典型的池化设计思想. 对象池的优点就是 ...
- java对象工厂池_[转载]Java对象池技术的原理及其实现
作者:汪永好 出处:计算机与信息技术 责任编辑: 方舟 [ 2006-11-25 07:00 ] 摘 要 :本文在分析对象池技术基本原理的基础上,给出了对象池技术的两种实现方式.还指出了使用对象池技术 ...
- java 对象池 博客_Java对象池技术的原理及其实现的小结
一起学习 Java对象的生命周期大致包括三个阶段:对象的创建,对象的使用,对象的清除.因此,对象的生命周期长度可用如下的表达式表示:T = T1 T2 T3.其中T1表示对象的创建时间,T2表示对象的 ...
- java 对象池 实现_Java对象池技术的原理及其实现
看到一片有关于java 对象基础知识,故转载一下,同时学习一下. 摘 要 本文在分析对象池技术基本原理的基础上,给出了对象池技术的两种实现方式.还指出了使用对象池技术时所应注意的问题. 关键词 对象池 ...
- Unity中的资源管理-对象池技术(3)
本文分享Unity中的资源管理-对象池技术(3) 在上两篇文章中, 我们一起学习了普通类的两种对象池实现, 今天接着介绍Unity中GameObject(主要是预制实例化对象)的对象池. GameOb ...
- Unity对象池技术
Unity对象池技术 https://blog.csdn.net/LemonXQ/article/details/77148886 顾名思义,对象池是存放对象的缓冲区.用户可以从缓冲区中放入/取出对象 ...
- 从入门到掉坑:Go 内存池/对象池技术介绍
作者:deryzhou,腾讯 PCG 后台开发工程师 Go 中怎么实现内存池,直接用 map 可以吗?常用库里 GroupCache.BigCache 的内存池又是怎么实现的?有没有坑?对象池又是什么 ...
- U3D客户端框架之类对象池技术优化C#语言GC
一.类对象池概念 1.类对象池介绍 类对象池,类似对象池,顾名思义就是一定数量的已经创建好的类对象(Object)的集合.当需要创建对象时,先在池子中获取,如果池子中没有符合条件的对象,再进行创建新对 ...
- Netty对象池技术Recycler解析
文章目录 1. Recycler是什么? 2. 源码分析 2.1 Stack 2.2 Handle 2.3 WeakOrderQueue 2.4 get获取流程 2.5 recycle 回收流程 3. ...
- Netty ObjectPool对象池技术原理分析
一.ObjectPool使用示例 1.对需要使用对象池的对象,定义一个ObjectPool的静态全局变量RECYCLE,用于对象的分配和回收.并在对象内定义一个ObjectPool.Handle成员变 ...
最新文章
- ICCV 2021 Workshop 盘点
- zeroc-ice的全双工通信策略
- 深入理解JVM虚拟机(四):Class类文件结构(一)
- Android九宫图(draw9patch)
- docker之Dockerfile指令介绍
- 【HDU - 2149】Public Sale (巴什博奕)
- 康普顿效应是弹性碰撞吗_如何正确解读物理实验结果系列之十二——康普顿效应与光子...
- WPF 凭证分录控件
- webtrends之ODBC源数据获取(一)——环境准备篇
- matlab绘制均匀b样条曲线,MATLAB绘制B样条曲线
- 哈夫曼编码问题(贪心)
- 【Python 实战基础】如何绘制关系网格图展示8个节点间的关系
- android10新功能,三星A80升级安卓10 更新One UI 2.0内容新功能介绍
- 垃圾分类很难吗?这是一篇来自AI垃圾回收箱的灵魂拷问…
- 零基础用Android Studio实现简单的本地视频播放器
- NumberRunningTextView改良版
- java ireport生成pdf_jasperreport 生成pdf实现下载与打印
- 欧拉定理的内容证明及欧拉函数的推导
- TCAM CAM 说明 原理 结构 Verilog 硬件实现
- android之文件上传
热门文章
- jQuery-JS在iframe中获取父页面的值
- Asp.Net数据控件遍历
- MySQL 字段操作命令
- 过滤器在图纸上的符号_看不懂电气图纸?资深级老师傅教你如何识图,学会后受用一生...
- python链表逆序实例_python 单链表翻转的简单示例
- 度量相似性数学建模_相似性指数 (2)
- mysql数据库安全怎么设置密码_关于mysql的数据库的安全问题
- Java编程:排序算法——基数排序
- Java集合框架源码解读(2)——HashMap
- 三维重建/SLAM笔记_最佳学习路线/攻略