我正在尋找一種工具,它可以幫助可視化應用程序的內存使用情況,並顯示大部分內存的使用情況 - 即什麼類,多少對象等。還有類似thread討論Windows的同樣的問題,但我需要在Linux上做到這一點。C++ linux應用程序的內存可視化
1
A
回答
3
1
你會想要使用Valgrind工具地塊(這是你已鏈接的文件)。它會定期拍攝堆的快照,並生成一個完整的堆棧跟蹤,其中哪些代碼行負責堆分配的百分比。
example.cpp:
struct Int_1 { int a; };
struct Int_2 { int a,b; };
struct Int_3 { int a,b,c; };
struct Int_4 { int a,b,c,d; };
int main(void)
{
for(int i = 0; i < 1000; ++i)
{
new Int_1(); // Line 10
new Int_2(); // Line 11
new Int_3(); // Line 12
new Int_4(); // Line 13
}
return 0;
}
你想使用調試符號編譯它,以便地塊可以給你確切的行號:
g++ -g example.cpp
現在下Valgrind的-地塊運行它:
valgrind --tool=massif ./a.out
這將生成一個文件massif.out.PID,其定期快照如下所示:
#-----------
snapshot=59
#-----------
time=1487054
mem_heap_B=38384
mem_heap_extra_B=53752
mem_stacks_B=0
heap_tree=detailed
n4: 38384 (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
n0: 15344 0x4005C3: main (MemExample.cpp:13)
n0: 11520 0x4005B1: main (MemExample.cpp:12)
n0: 7680 0x40059F: main (MemExample.cpp:11)
n0: 3840 0x40058D: main (MemExample.cpp:10)
該輸出被解釋爲「在任意時間單位1487054,有38384字節分配在堆上」。縮進表示這些38348字節的分層分解,您可以觀察比例以匹配給定的結構大小。使用更復雜的代碼,您會看到包含更多方法和構造函數的完整調用鏈。
然後,這個想法是,這個輸出中構造函數旁邊的字節數顯示該類的多少個實例通過該特定的堆棧跟蹤進行分配,例如:第10行分配了3840字節,這是一個Int_1對象的構造所以目前有960個實例。
+0
您想在手冊中仔細閱讀該部分:http://valgrind.org/docs/manual/ms-manual.html#ms-manual.thesnapshotdetails – lnqhien
相關問題
- 1. Linux C應用程序內存不足
- 2. 如何監視或可視化delphi應用程序的內存碎片
- 3. C++可視化變量的內存
- 4. 從應用程序內監視ASP.NET應用程序內存
- 5. 帶有可視化編程編輯器的C#應用程序
- 6. 在Linux中監視程序的內存使用情況
- 7. 視頻內存和Android應用程序
- 8. gsoap內存泄漏C應用程序
- 9. 程序可視化
- 10. C++ Linux GCC應用程序中的GUID
- 11. linux上的python cherrypy應用程序未釋放內存
- 12. 檢測並移除Linux應用程序中的內存泄漏
- 13. 這是Linux Mono應用程序中的內存泄漏嗎?
- 14. 關於linux內存問題的C++多線程程序
- 15. 在C應用程序中剖析最大內存使用情況 - linux
- 16. Linux總可用內存
- 17. 音樂可視化/互動應用程序的最佳方法
- 18. 原生Win32應用程序的可視化設計器
- 19. 如何在我的Sencha Touch應用程序中優化內存?
- 20. C#應用程序中的內存利用率Compact Framework應用程序
- 21. R用於數據可視化的Shiny應用程序
- 22. 如何最小化我的應用程序使用的內存?
- 23. linux C++應用程序部署
- 24. linux-windows跨C++應用程序
- 25. 尋求和在Linux C++應用程序
- 26. 爲Windows編譯Linux應用程序(C)
- 27. Linux內存使用率高時Linux進程釋放內存?
- 28. C++ linux - 在C++ linux應用程序中獲取IP
- 29. 的內存限制應用程序可用
- 30. 禁用可視化基本應用程序的鍵盤
您提到的主題討論Valgrind可以解決問題 –