如何在C ++中生成内存映射

时间:2011-12-13 11:55:40

标签: c++ visual-studio memory-management

我使用visual studio在C ++中创建了一个应用程序。根据我的应用程序,它应该占用非常少的内存,但它占用了很多内存。所以,现在我想明智地了解内存映射功能。在Visual Studio中是否有任何方法可以生成内存映射或任何其他工具或任何其他方式来生成内存映射。请尽快回复。

先谢谢。

Mayank

2 个答案:

答案 0 :(得分:1)

您可以尝试使用Visual Leak Detector。它不会为您提供功能明智的内存使用,但会在调试器输出中突出显示泄漏的内存跟踪。你必须要玩一下才能习惯它。

答案 1 :(得分: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,所以我无法帮助更多)