[問題] 同時間需要大量delete的狀況

看板C_and_CPP作者 (赤木巧☠)時間11年前 (2013/07/04 23:25), 編輯推噓3(302)
留言5則, 4人參與, 最新討論串1/4 (看更多)
最近碰到一個問題,想問問板上先進的如何處理比較合適。 簡述問題的狀況如下: 有一個功能會依照輸入值,動態產生node, 有時可能只有千百個,有時候會上萬甚至幾十萬。 這些node數量過大的時候,delete階段相當緩慢,有時一停就是2~3秒。 而這些node保證一定是一起新增,一起刪除, 中間不會有node提前刪除或者刪除了又新增的行為。 並且不太在乎記憶體的使用,但很在乎速度。 目前兩個方式: 1.之前的做法會是,寫一個manager來把這些資料收集起來,延遲刪除。 2.而我想自製一個memory allocator類別,給裝node的容器使用,他的行為是: (1)批量的向系統要記憶體,一次可能要100或1000個node的大小, 然後慢慢分配給容器使用,用完再要一個批量。 (2)容器要求deallocate的時候不做事,只確保做完解構。 (因為記憶體不重複使用,最後會一次刪,所以不一一處理deallocate) (3)等全部的node要一起刪除的時候,把批次要來的記憶體釋放掉, 可以大量減少delete的次數。 想請教一下: 一.這樣的問題有沒有其他更合適的處理方式?方法1.或方法2.哪一個好一點。 二.關於方法2.目前想到就是要謹慎使用,並且包裝好確保會安全的刪除, 不知道有沒有什麼我沒有考慮到的缺點,或者不推薦這樣做的理由。 還請各位指教,感謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.193.163.46 ※ 編輯: xtxml 來自: 123.193.163.46 (07/04 23:32)

07/04 23:34, , 1F
就memory pool啊 也就是方法二 很多library都有
07/04 23:34, 1F
感謝,我會去找看看其他lib的做法。

07/05 00:06, , 2F
既然不太在乎記憶體使用,那幹麻不擺著,何必要 delete?
07/05 00:06, 2F

07/05 00:11, , 3F
精確的說是不在乎短期的使用量,否則長期堆下來肯定會爆...
07/05 00:11, 3F

07/05 00:13, , 4F
不用堆阿,就 reuse 就好了。
07/05 00:13, 4F
啊,我剛剛忽然想到其實是可以的,我之前想錯另一件事情一直以為不行@@ 感謝提醒

07/05 00:14, , 5F
boost::pool_allocator
07/05 00:14, 5F
哦哦,剛好有在用boost c++ lib,晚點會去看一下這部分,感謝。 ※ 編輯: xtxml 來自: 123.193.163.46 (07/05 00:21)
文章代碼(AID): #1HrPFyZD (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1HrPFyZD (C_and_CPP)