在稍微大型一點的軟體系統開發中,通常我們會用到記憶體池,物件池,執行緒池,連線池等各種各樣的池(pool),本文就來講一講物件池(object pool)。下面從四個方面來介紹一下物件池:
1.什麼是物件池(object pool) ?
池(poo), 與集合在某種意義上有些相似。 水池,是一定數量的水的集合;記憶體池,是一定數量的已經分配好的記憶體的集合;執行緒池,是一定數量的已經建立好的執行緒的集合。那麼,物件池,顧名思義就是一定數量的已經建立好的物件(object)的集合。
2.物件池是幹什麼的?
舉個生活中水池的例子,在沒有水池的時候,每次用水,都要去很遠的地方挑水;有了水池之後的,一次挑很多水來,放在水池蓄下來,這樣以後的一段時間內,用水的時候就不用去挑了,直接從水池取就可以了。同樣的道理,在c/c++的程式中,如果一種物件,你要經常用malloc/free(或new/delete)來建立、銷毀,這樣子一方面開銷會比較大,另一方面會產生很多記憶體碎片,程式跑的時間一長,效能就會下降。這個時候,就產生了物件池。可以事先建立好一批物件,放在乙個集合中,以後每當程式需要新的物件時候,都從物件池裡獲取,每當程式用完該物件後,都把該物件歸還給物件池。這樣,就會少了很多的malloc/free(new/delete)的呼叫,在一定程度上提高了系統的效能,尤其在動態記憶體分配比較頻繁的程式中效果較為明顯。
3.物件池有什麼特徵?
一般來說,物件池有下面幾個特徵:
(1)物件池中有一定數量已經建立好的物件
(2)物件池向使用者提供獲取物件的介面,當使用者需要新的物件時,便可通過呼叫此介面獲取新的物件。如果物件池中有事先建立好的物件時,就直接返回給使用者;如果沒有了,物件池還可以建立新的物件加入其中,然後返回給使用者
(3)物件池向使用者提供歸還物件的介面,當使用者不再使用某物件時,便可通過此介面把該物件歸還給物件池
4.怎麼實現乙個物件池?
下面是乙個物件池的c++簡單實現,感興趣的朋友可以自己研究一下,由於程式比較簡單,在這裡,我就不再說明了。
#include templateclass objectpool
}~objectpool()
m_unsize = 0;
}object * getobject()
else
return pobj;
}void returnobject(object * pobj)
private:
size_t m_unsize;
std::listm_opool;
};
深入淺出sizeof
int佔 位元組,short佔 位元組 1.0 回答下列問題 答案在文章末尾 1.sizeof char 2.sizeof a 3.sizeof a 4.strlen a 如果你答對了全部四道題,那麼你可以不用細看下面關於sizeof的論述。如果你答錯了部分題目,那麼就跟著我來一起 關於sizeof...
深入淺出ShellExecute
ipconfig c log.txt應如何處理?二樓的朋友,開啟拔號網路這樣 shellexecute null,open c windows rundll32.exe shell32.dll,control rundll c windows system telephon.cpl null,sw ...
深入淺出ShellExecute
深入淺出shellexecute譯者 徐景周 原作 nishant s q 如何開啟乙個應用程式?shellexecute this m hwnd,open calc.exe sw show 或shellexecute this m hwnd,open notepad.exe c mylog.log...