2011-12-13 78 views
0

我已經使用visual studio在C++中創建了一個應用程序。根據我的應用程序,它應該佔用非常少的內存,但它佔用了很多內存。所以,現在我想知道內存映射功能。在Visual Studio中是否有任何方法來生成內存映射或任何其他工具或任何其他方式來生成內存映射。請儘快回覆。如何在C++中生成內存映射

在此先感謝。

Mayank

+4

**你認爲「內存映射」是什麼? –

+0

您不需要內存映射,但是可以跟蹤內存分配和釋放內存分配器工具 –

+1

這是一個內置功能:http://msdn.microsoft.com/en-us/library/e5ewb1h3%28v= VS.90%29.aspx –

回答

0

我相信這是特定不是語言或編譯器的更具體的操作系統。

在Linux上,您可以讀取(從您的進程中)/proc/self/maps以瞭解您的應用程序的內存映射。

 % cat /proc/self/maps 
    00400000-0040c000 r-xp 00000000 08:01 2334758    /bin/cat 
    0060c000-0060d000 rw-p 0000c000 08:01 2334758    /bin/cat 
    012fd000-0131e000 rw-p 00000000 00:00 0      [heap] 
    7f1714cf2000-7f1715009000 r--p 00000000 08:01 3932623  /usr/lib/locale/locale-archive 
    7f1715009000-7f1715183000 r-xp 00000000 08:01 3892787  /lib/x86_64-linux-gnu/libc-2.13.so 
    7f1715183000-7f1715383000 ---p 0017a000 08:01 3892787  /lib/x86_64-linux-gnu/libc-2.13.so 
    7f1715383000-7f1715387000 r--p 0017a000 08:01 3892787  /lib/x86_64-linux-gnu/libc-2.13.so 
    7f1715387000-7f1715388000 rw-p 0017e000 08:01 3892787  /lib/x86_64-linux-gnu/libc-2.13.so 
    7f1715388000-7f171538d000 rw-p 00000000 00:00 0 
    7f171538d000-7f17153ac000 r-xp 00000000 08:01 3892902  /lib/x86_64-linux-gnu/ld-2.13.so 
    7f1715589000-7f171558c000 rw-p 00000000 00:00 0 
    7f17155aa000-7f17155ac000 rw-p 00000000 00:00 0 
    7f17155ac000-7f17155ad000 r--p 0001f000 08:01 3892902  /lib/x86_64-linux-gnu/ld-2.13.so 
    7f17155ad000-7f17155ae000 rw-p 00020000 08:01 3892902  /lib/x86_64-linux-gnu/ld-2.13.so 
    7f17155ae000-7f17155af000 rw-p 00000000 00:00 0 
    7fff374d2000-7fff374f3000 rw-p 00000000 00:00 0    [stack] 
    7fff3750c000-7fff3750d000 r-xp 00000000 00:00 0    [vdso] 
    ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0  [vsyscall] 

上面的示例示出了執行該命令cat進程的存儲器映射。

編輯

不要指望能找到函數的內存使用,因爲給定數據的內存使用情況是程序的全局屬性(所以每個函數的內存使用情況的想法沒有任何意義) 。你可以使用一些garbage collection技術。你可以(至少在Linux上)使用Boehm's garbage collector,或者編寫你自己的GC,或者用valgrind(或者爲你的系統編寫類似的程序)搜索內存泄漏。

您必須瞭解您的操作系統是否能爲您提供同等設施。 (我不知道也不用Windows,所以我忍不住更多)

+0

感謝您的回覆..其實我正在尋找功能明智的內存故障。我已經使用了VTune,但在VTune中沒有任何選項可以跟蹤內存崩潰的功能(就像VTune爲CPU TIME顯示的那樣)。例如,我的應用程序需要5Mb(由Window的任務管理器報告),我想知道哪個函數需要多少內存。 (僅供參考,由VTune報告,我的應用程序沒有內存泄漏)。 –

+0

任務管理器中列出的大小將(我相信)是分配的進程空間的大小,它將包括生成的程序可執行文件本身的大小(有多大?),並且可能還包括它鏈接的共享庫的大小(你與什麼鏈接?)。我認爲這不太可能成爲您在程序中使用的免費商店或堆棧空間的一個很好的指標 - 尤其是在5MB等相對較低的價值下。 – boycy

1

你可以嘗試使用Visual Leak Detector。它不會給你功能明智的內存使用情況,但會突出顯示調試器輸出中泄漏的內存痕跡。你將不得不玩一下去習慣它。