Re: [問題] Return memory to OS from big std::map

看板C_and_CPP (C/C++)作者 (用口頭禪區分年記)時間12年前 (2014/01/13 19:00), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《Wush978 (拒看低質媒體)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : Linux : G++ : 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) : No : 問題(Question): : 如何設計allocator讓刪除std::map之後能把消耗的記憶體返回給OS : 補充說明(Supplement): : 我正在撰寫多Process和MPI的C++ extension of R 來處理大量資料。 : 其中在data cleaning的時候,需要使用 : std::map<std::string, std::map<std::string, int> > : 建立Index來加速random access。 : 但是當整理完畢之後,我刪除std::map之後卻發現記憶體並沒有歸還到OS, : 所以後續R 要調用記憶體的時候就不足了。 : 後來我注意到這篇文章: : http://stackoverflow.com/questions/2629018/how-do-i-force-my-stdmap-to-deallocate-memory-used : (縮網址:http://0rz.tw/VxcBo) : 看起來這是預設的memory allocator的行為。 : 我想請問,除了下面有人提到用boost的pool library來自製memory allocator之外, : 還有沒有什麼其他建議呢?(例如改用其他資料結構或是第三方library) : 謝謝 因為不知道 extension for R 是怎麼寫的,我還是說說看應該有幫助的建議。 1. Fork Process. 當你要使用大塊的記憶體的時候,使用不同的 process。 當運算結束後,刪掉process。那麼記憶體會自然回到 OS 2. 用 mtrace profile 一下 memory leak, 或是請 malloc 把記憶體還回去 mtrace : http://www.linuxjournal.com/article/6059 force malloc 把記憶體還回去 http://stackoverflow.com/questions/17199554/how-can-i-force-the-stl-memory-cache-to-clear -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.171.171.137

01/14 01:09, , 1F
malloc_trim ! 明天試試看,謝謝
01/14 01:09, 1F
文章代碼(AID): #1IqySvCa (C_and_CPP)
文章代碼(AID): #1IqySvCa (C_and_CPP)