最近我發現了Boos Pool庫,並開始將它調整爲我的代碼。圖書館提到它缺少的一件事是基類,它將覆蓋任何類的新/刪除操作符,並使用該池進行內存管理。我寫了自己的實現和一些元模板編程,實際上它看起來非常體面(通過簡單地從基類派生,支持大小在1到1024個字節之間的任何類)Boost Pool free效率O(n)or O(1)
我提到那些因爲目前爲止這真的很酷,令人興奮,然後我發現這個post from Boost mailing list。看起來有些人確實錘擊了Pool庫,特別指出他們所說的free()方法在O(n)時間運行的低效性。我通過代碼加強,並發現這是方法的實現:
void free(void * const chunk)
{
nextof(chunk) = first;
first = chunk;
}
對我來說,這看起來像O(1),我真的不明白他們在說什麼的低效率。我注意到的一件事是,如果你使用singleton_pool的多個實例(即不同的標籤和/或分配大小),它們都共享相同的互斥量(關鍵部分更精確),這可以進行一些優化。但是如果你使用常規的堆操作,他們會使用相同的同步形式。
那麼沒有人認爲池庫效率低下和過時?
什麼nextof(無效*)的實施? –
像往常一樣,擁有一個互斥或多個互斥是一種折衷。如果你擁有** lot **池,你會得到一種內存碎片,因爲它們保持自己的記憶。 –
@Null nextof(...)是一個單線程reinterpret_cast – DXM