我正在尋找一種工具,它可以幫助可視化應用程序的內存使用情況,並顯示大部分內存的使用情況 - 即什麼類,多少對象等。還有類似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下的可視化內存調試應用程序?
- 2. Linux C應用程序內存不足
- 3. Linux上多線程C++應用程序中的內存泄漏
- 4. 如何監視或可視化delphi應用程序的內存碎片
- 5. C++可視化變量的內存
- 6. Linux c應用程序內存使用情況
- 7. 帶有可視化編程編輯器的C#應用程序
- 8. Web應用程序測試可視化
- 9. 在Linux中監視程序的內存使用情況
- 10. 視頻內存和Android應用程序
- 11. 可用內存iPhone應用程序
- 12. gsoap內存泄漏C應用程序
- 13. c#3d應用程序內存分配
- 14. C#應用程序,監視器內存消耗
- 15. 程序可視化
- 16. asp.net web應用程序可以與獨立的可視化C++應用程序進行通信嗎?
- 17. 如何檢查Linux上的C++ Qt應用程序中的內存泄漏?
- 18. 如何預測linux c/C++程序中的內存泄漏?
- 19. C++ Linux GCC應用程序中的GUID
- 20. 優化數據可視化Web應用程序的性能
- 21. 關於linux內存問題的C++多線程程序
- 22. Linux內存不足導致我的Android應用程序死機
- 23. linux上的python cherrypy應用程序未釋放內存
- 24. 檢測並移除Linux應用程序中的內存泄漏
- 25. 這是Linux Mono應用程序中的內存泄漏嗎?
- 26. 在C應用程序中剖析最大內存使用情況 - linux
- 27. 內存/內存應用程序問題
- 28. Linux總可用內存
- 29. 音樂可視化/互動應用程序的最佳方法
- 30. C#應用程序中的內存利用率Compact Framework應用程序
您提到的主題討論Valgrind可以解決問題 –