C++对象池技术剖析

来源:互联网 发布:win10恢复原始mac地址 编辑:程序博客网 时间:2024/06/05 07:06

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

可以事先创建一批对象,放在一个链表中,以后每当程序要新的对象时,都从对象池中获取,每当程序用完该对象后,都把该对象归还给对象池。这样就少了很多的malloc/free操作,在一定程度上提高了系统的性能,尤其在动态内存分配比较频繁的程序中效果尤其明显。

对象池的特征:

1、对象池中有一定数量创建好的对象。

2、对象池向用户提供获取对象的接口和归还对象的接口。

下面是参考网上的资料写的实现代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#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 *operatornew(size_t size)
    {
        return pool_.malloc_data();
    }
    void operatordelete(void *p)
    {
        pool_.free_data(p);
    }
};

测试程序:

?
1
2
3
4
5
6
7
8
9
10
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;
}

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

转载地址:http://www.cnblogs.com/fistao/archive/2013/04/09/3011005.html