在頻繁申請和釋放類的例項時,有兩點值得考慮:速度問題對空間會變得七零八落。 這時候使用物件池是乙個不錯的注意,這會有效緩解上面兩個現象。物件池的主要思想就是:事先申請一些記憶體單元由應用程式自身管理,知道整個程式結束。本人實現的乙個模板類如下:
//judedeng 2011.1.18
#ifndef __objectpool_h__
#define __objectpool_h__
#include
using namespace std;
#define default_size 10
//申請物件
#define new_obj(obj_manager, class_name, arglist) (sizeof(class_name)==obj_manager.getsizeoftype()? (new(obj_manager.mallocobject()) class_name arglist) : null)
//釋放物件
#define del_obj(obj_manager, obj_pointer) (obj_manager.freeobject(obj_pointer) ? (obj_pointer=null, true) : false)
template
class cobjectmgr_t
protected:
listm_activeobjectlist, m_idleobjectlist;
};#include "objectpoolimp.h"
#endif
#ifndef __objectpoolimp_h__
#define __objectpoolimp_h__
#include "objectpool.h"
template
cobjectmgr_t::cobjectmgr_t(int sizeofobjectlist)
else
if(pobject)
return null;
}template
bool cobjectmgr_t::freeobject(t * pobject)
}return false;
}template
cobjectmgr_t::~cobjectmgr_t()
for(ite=m_idleobjectlist.begin(); ite!=m_idleobjectlist.end(); ++ite)
printf("/nfor debug:: activeobjectlist = %d ,, idleobjectlist = %d/n", c1, c2);
m_activeobjectlist.clear();
m_idleobjectlist.clear();
}template
int cobjectmgr_t::reclaimidelmem(double rate)
return 0;
}#endif
#include
#include
#include "objectpool.h"
class ca
ca(int x=2)
ca(ca& obj, double a1, void *a2)
virtual ~ca()
void dosth(...)
class cb
void dosth(...)
};void main()
system("pause");
}
C 11 使用可變引數模板類實現物件池
物件池模板類 pragma once include cobjinstance.h include include include 實現模板型別物件池,使其可以適配任何類型別且是執行緒安全的!template class t class cobjpool cobjpool 再釋放node的記憶體 d...
山寨STL實現之記憶體池
記憶體池的作用 減少記憶體碎片,提高效能。首先不得不提的是win32和x64中對於指標的長度是不同的,在win32中乙個指標佔4位元組,而在x64中乙個指標佔8位元組。也正是不清楚這一點,當我在x64中將指標作為4位元組修改造成其他資料異常。首先我們先來定義三個巨集 define align siz...
C 物件池實現
在實際中,我們會遇到乙個類最多隻允許若干個物件同時存在的情形。如果這個類的物件會被頻繁的建立,使用並銷毀,那這時會對系統效能造成影響,而這時可以考慮使用物件池的方法來避免每次使用物件都需要從 構造 使用 銷毀 這個流程,物件池中的每個物件都一次構造多次使用,而析構也只會在物件池析構是才會發生。要實現...