深入淺出物件池 Object Pool

2021-09-01 22:17:57 字數 1240 閱讀 2311

在稍微大型一點的軟體系統開發中,通常我們會用到記憶體池,物件池,執行緒池,連線池等各種各樣的池(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...