前段時間遇到一些關於記憶體方面的問題,使用了malloc_stats來進行記憶體檢測。呼叫函式後,函式會把輸出定向到strerr中,內容如下,
arena 0://第乙個arena(每個執行緒分配乙個arena),這裡只有乙個執行緒
system bytes = 135168//本執行緒從作業系統獲得的動態記憶體,這裡是132kb
in use bytes = 1152//本執行緒在使用的動態記憶體,1152位元組
total (incl. mmap)://總的使用情況,各個執行緒使用動態記憶體的累加值
system bytes = 135168//本程序從作業系統獲得的動態記憶體,這裡是132kb
in use bytes = 1152//本程序在使用的動態記憶體,1152位元組
max mmap regions = 0//當一次申請記憶體超過128kb(32位作業系統)或1mb(64位作業系統)時,會增加mmap區域,這裡統計使用mmap區域的個數
max mmap bytes = 0//mmap區域對應記憶體大小
這裡是brk 和 mmap統計的原因是這樣的。brk在記憶體是在堆中申請記憶體<128k時使用,為了保證效率,並不是直接還給os。
而mmap則在》128k時使用,記憶體會直接釋放,感興趣的可以看看下面的連線。
這時就會有乙個比較有趣的問題,當使用top監控記憶體使用的時候,res項,也就是程式使用的物理記憶體顯示的是上面的system bytes,也就是說當程式中delete了brk中申請的資料,並不會在top中表現出來,因為他本身並沒有還給作業系統。並且會產生很多碎片,看來以後使用new的時候,需要多多注意。有時間看看malloc的實現。
Linux 記憶體洩露檢測
1.需要在記憶體洩露開始的開始呼叫void mtrace void mtrace 為malloc等函式安裝 hook,用於記錄記憶體分配資訊,在需要記憶體洩露檢查 結束的地方呼叫void muntrace void 注意 在一般情況下,不要呼叫muntrace 而讓程式自然結束。因為可能有些記憶體釋...
linux檢測記憶體洩露
關於記憶體洩露 客戶的一台ap server,記憶體使用量一直很大,swap使用量從三月份開始在慢慢增多。懷疑與記憶體洩露有關,查詢了一些資料,發現對於linux真個系統的記憶體洩露檢測工具很少。有如下幾個,但是都只針對單個程式。如果測試真個記憶體的情況,特別是歷史記錄,不知道還有沒有好的工具。va...
Windows mobile下記憶體洩露檢測
crtdbg.h標頭檔案 如下 crtdbg.cpp 如下 然後在程式的main函式裡新增 crtsetdbgflag on 其實這是乙個 define crtsetdbgflag ignore garbagecollector gb 這樣的定義 在程式退出的時候會呼叫garbagecollecto...