对象池就是一定数量已经创建好的对象的集合。

可以事先创建一批对象,放在一个链表中,以后每当程序要新的对象时,都从对象池中获取,每当程序用完该对象后,都把该对象归还给对象池。这样就少了很多的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++对象池技术剖析相关推荐

  1. 面试官问:对象池技术了解吗?apache common pool2呢?

    欢迎关注方志朋的博客,回复"666"获面试宝典 对象池顾名思义就是存放对象的池,与我们常听到的线程池.数据库连接池.http连接池等一样,都是典型的池化设计思想. 对象池的优点就是 ...

  2. java对象工厂池_[转载]Java对象池技术的原理及其实现

    作者:汪永好 出处:计算机与信息技术 责任编辑: 方舟 [ 2006-11-25 07:00 ] 摘 要 :本文在分析对象池技术基本原理的基础上,给出了对象池技术的两种实现方式.还指出了使用对象池技术 ...

  3. java 对象池 博客_Java对象池技术的原理及其实现的小结

    一起学习 Java对象的生命周期大致包括三个阶段:对象的创建,对象的使用,对象的清除.因此,对象的生命周期长度可用如下的表达式表示:T = T1 T2 T3.其中T1表示对象的创建时间,T2表示对象的 ...

  4. java 对象池 实现_Java对象池技术的原理及其实现

    看到一片有关于java 对象基础知识,故转载一下,同时学习一下. 摘 要 本文在分析对象池技术基本原理的基础上,给出了对象池技术的两种实现方式.还指出了使用对象池技术时所应注意的问题. 关键词 对象池 ...

  5. Unity中的资源管理-对象池技术(3)

    本文分享Unity中的资源管理-对象池技术(3) 在上两篇文章中, 我们一起学习了普通类的两种对象池实现, 今天接着介绍Unity中GameObject(主要是预制实例化对象)的对象池. GameOb ...

  6. Unity对象池技术

    Unity对象池技术 https://blog.csdn.net/LemonXQ/article/details/77148886 顾名思义,对象池是存放对象的缓冲区.用户可以从缓冲区中放入/取出对象 ...

  7. 从入门到掉坑:Go 内存池/对象池技术介绍

    作者:deryzhou,腾讯 PCG 后台开发工程师 Go 中怎么实现内存池,直接用 map 可以吗?常用库里 GroupCache.BigCache 的内存池又是怎么实现的?有没有坑?对象池又是什么 ...

  8. U3D客户端框架之类对象池技术优化C#语言GC

    一.类对象池概念 1.类对象池介绍 类对象池,类似对象池,顾名思义就是一定数量的已经创建好的类对象(Object)的集合.当需要创建对象时,先在池子中获取,如果池子中没有符合条件的对象,再进行创建新对 ...

  9. Netty对象池技术Recycler解析

    文章目录 1. Recycler是什么? 2. 源码分析 2.1 Stack 2.2 Handle 2.3 WeakOrderQueue 2.4 get获取流程 2.5 recycle 回收流程 3. ...

  10. Netty ObjectPool对象池技术原理分析

    一.ObjectPool使用示例 1.对需要使用对象池的对象,定义一个ObjectPool的静态全局变量RECYCLE,用于对象的分配和回收.并在对象内定义一个ObjectPool.Handle成员变 ...

最新文章

  1. ICCV 2021 Workshop 盘点
  2. zeroc-ice的全双工通信策略
  3. 深入理解JVM虚拟机(四):Class类文件结构(一)
  4. Android九宫图(draw9patch)
  5. docker之Dockerfile指令介绍
  6. 【HDU - 2149】Public Sale (巴什博奕)
  7. 康普顿效应是弹性碰撞吗_如何正确解读物理实验结果系列之十二——康普顿效应与光子...
  8. WPF 凭证分录控件
  9. webtrends之ODBC源数据获取(一)——环境准备篇
  10. matlab绘制均匀b样条曲线,MATLAB绘制B样条曲线
  11. 哈夫曼编码问题(贪心)
  12. 【Python 实战基础】如何绘制关系网格图展示8个节点间的关系
  13. android10新功能,三星A80升级安卓10 更新One UI 2.0内容新功能介绍
  14. 垃圾分类很难吗?这是一篇来自AI垃圾回收箱的灵魂拷问…
  15. 零基础用Android Studio实现简单的本地视频播放器
  16. NumberRunningTextView改良版
  17. java ireport生成pdf_jasperreport 生成pdf实现下载与打印
  18. 欧拉定理的内容证明及欧拉函数的推导
  19. TCAM CAM 说明 原理 结构 Verilog 硬件实现
  20. android之文件上传

热门文章

  1. jQuery-JS在iframe中获取父页面的值
  2. Asp.Net数据控件遍历
  3. MySQL 字段操作命令
  4. 过滤器在图纸上的符号_看不懂电气图纸?资深级老师傅教你如何识图,学会后受用一生...
  5. python链表逆序实例_python 单链表翻转的简单示例
  6. 度量相似性数学建模_相似性指数 (2)
  7. mysql数据库安全怎么设置密码_关于mysql的数据库的安全问题
  8. Java编程:排序算法——基数排序
  9. Java集合框架源码解读(2)——HashMap
  10. 三维重建/SLAM笔记_最佳学习路线/攻略