我有一個小類(32位系統上的16個字節),我需要動態分配。在大多數情況下,任何給定實例的生命週期都很短。有些實例也可能跨線程邊界傳遞。高效地分配許多短命的小物體
做了一些分析後,我發現我的程序似乎花費了更多的時間來分配和釋放事物,而不是實際花費在使用它們,所以我想用更有效率的東西替換默認的new和delete。
對於一個大對象(數據庫連接發生的時候,這對於構造而不是分配來說是很昂貴的),我已經在使用一個池化系統,但是它包含一個存儲「空閒」對象的列表,還有一個互斥體爲線程安全。在互斥體和列表之間,它實際上比用於小對象的基本新/刪除更差。
我發現了一些谷歌上的小物件分配器的,但他們似乎可以用未在一個線程安全的方式使用的全局/靜態池,使它們不適合我使用:(
其他什麼我有選擇有效的內存管理這樣的小對象嗎?
如果你的對象非常小,爲什麼不通過價值傳遞呢?另外,你的許多小物件是否一樣,或者它們都不同?如果第一個,看看boost.flyweight – KitsuneYMG 2010-01-28 18:19:24
你的問題中沒有什麼證據表明你可以做得更好。你認爲你做了什麼? – 2010-01-28 18:29:18
當你寫互斥體的時候,你的意思是一般還是互斥體呢?如果特別的話,只要你沒有跨越過程邊界,那麼CriticalSection會更好。 – 2010-01-28 18:41:42