目前我分析一個C++應用程序及其內存消耗。在某個函數調用之前和之後檢查進程的內存消耗是可能的。但是,由於技術原因或爲了提高效率,操作系統(Linux)似乎不僅分配了所需的字節數,而且還分配了更多的數據,以後可以由應用程序使用。這使得很難分析應用程序的內存行爲。內存調試
是否有解決方法?是否可以將Linux切換到只分配所需數量的字節/頁面的模式?
目前我分析一個C++應用程序及其內存消耗。在某個函數調用之前和之後檢查進程的內存消耗是可能的。但是,由於技術原因或爲了提高效率,操作系統(Linux)似乎不僅分配了所需的字節數,而且還分配了更多的數據,以後可以由應用程序使用。這使得很難分析應用程序的內存行爲。內存調試
是否有解決方法?是否可以將Linux切換到只分配所需數量的字節/頁面的模式?
,如果你使用malloc /新,分配器總是會ALLOC多一點字節比你的要求,因爲它需要一定的空間,以儘自己的管家服務,還可以根據需要排列在頁面上邊界的字節數。分配的補充字節數量取決於實現。 你可以考慮使用諸如gperftools(谷歌)之類的工具來監視所使用的內存。
我想幾年前檢查過程內存韭菜。我寫了一個非常小的調試器(它比聽起來容易),只需將斷點設置爲malloc(),free(),mmap()...以及類似的函數(I在Windows下做,但在Linux下更簡單 - 我在Linux中做了另一個目的!)。
每當一個斷點達到我登錄的功能參數,並繼續執行程序...
通過處理日誌文件(半自動)我能找到內存泄漏。
缺點:這是不可能的調試並行使用另一個調試該程序。
你衡量什麼內存使用(例如堆或堆棧),怎麼辦?你用過valgrind嗎? –
我測量過程的虛擬大小。 Valgrind有一套有限的數字舍入模式,因此我的應用程序不會在Valgrind下運行。 – leftangle
查看http://stackoverflow.com/questions/10540845/linux-heap-structure-and-the-behaviour-with-malloc-and-free接受的答案。 –