如何在C++; 我使用VisualStudio在C++中创建了一个应用程序。根据我的应用程序,它应该占用很少的内存,但是占用了很多内存。现在我想知道内存映射函数。在VisualStudio中是否有任何方法可以生成内存映射或任何其他工具,或者有任何其他方法可以生成内存映射。请尽快回复

如何在C++; 我使用VisualStudio在C++中创建了一个应用程序。根据我的应用程序,它应该占用很少的内存,但是占用了很多内存。现在我想知道内存映射函数。在VisualStudio中是否有任何方法可以生成内存映射或任何其他工具,或者有任何其他方法可以生成内存映射。请尽快回复,c++,visual-studio,memory-management,C++,Visual Studio,Memory Management,提前谢谢 Mayank我认为它比特定于语言或编译器更特定于操作系统 在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 /

提前谢谢


Mayank

我认为它比特定于语言或编译器更特定于操作系统

在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
命令的进程的内存映射

编辑

不要期望按函数查找内存使用情况,因为给定数据的内存使用情况是程序的全局属性(因此每个函数的内存使用情况这一概念毫无意义)。你可以使用一些技巧。您可以(至少在Linux上)使用或编写自己的GC,或使用(或类似的系统程序)查找内存泄漏

你必须弄清楚你的操作系统是否给了你同等的功能。
(我不知道也不使用Windows,因此我无法提供更多帮助)

您可以尝试使用。它不会为您提供功能方面的内存使用,但会在调试器输出中突出显示泄漏的内存跟踪。你必须玩一玩,去适应它。

你认为“内存映射”是什么?你不需要内存映射,而是一种可以跟踪内存分配和释放的探查器工具。这是一个内置功能:谢谢你的回答。。实际上,我正在寻找功能方面的内存崩溃。我曾使用过VTune,但VTune中没有任何选项可用于跟踪内存的功能分解(如VTune显示CPU时间)。例如,我的应用程序占用5Mb(由Window的任务管理器报告),我想知道哪个函数占用了多少内存。(仅供参考,我的应用程序中没有VTune报告的内存泄漏)。任务管理器中列出的大小(我相信)是分配的进程空间的大小,其中包括生成的可执行程序本身的大小(有多大?)以及它所链接的共享库的大小(链接的对象是什么?)。我认为它不太可能很好地指示您在程序中使用了多少空闲存储或堆栈空间,尤其是在5MB这样的相对较低的值下。