• 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;
    }
    

    上述代码,实现了一个简单的对象池,更深入的解释会在后续代码中实现。

  • 相关阅读:
    django中间件和常用模块
    django之forms组件
    django和ajax、分页器、批量插入数据
    django之模型层ORM操作
    (专题三)02-1 程序和程序设计流程-选择结构
    (专题三)01 程序和程序设计流程-顺序结构
    (专题二)05 矩阵的存储方式
    (专题二)04 矩阵的处理-矩阵的特征值
    [代码片段]YEAH!连通域标记和计数
    TTL和CMOS
  • 原文地址:https://www.cnblogs.com/fistao/p/3011005.html
Copyright © 2020-2023  润新知