【发布时间】:2012-06-28 23:43:56
【问题描述】:
假设我有一个用 C/C++ 编写的程序,我想知道有多少内存用于数据(堆、堆栈)以及有多少内存用于代码(库、可执行文件等) )。
我曾经使用“valgrind”测量过使用的动态内存空间,但我认为它没有分析数据和代码的内存占用的功能。
平台:Mac(可能是 Linux)
【问题讨论】:
-
执行此操作的任何操作都可能是相当特定于平台的,因此您可能需要告诉我们平台以获得好的答案。
-
你的意思是使用物理内存吗?还是使用虚拟内存? (例如,如果你对一个 1GB 的文件进行内存映射但不碰映射,你是不是只使用了 1GB 的内存?)
-
@Carsten,您知道“valgrind”是否可以分析代码的内存占用情况吗?不是为了数据的内存占用。我不是在问我是否可以做一些内存泄漏检查...
-
@Carsten OP 询问“我如何使用 Valgrind(或其他工具)来分析堆消耗的内存量与代码段消耗的内存量?”
-
我有一个相当幼稚的想法。对程序的
main例程进行小修改。将变量声明为volatile int stopAndHold = 1;,然后在main例程的开头有一个while(stopAndHold) {}循环。启动程序,并使用进程查看器查看程序消耗的内存量。这应该可以让您估计 main 在堆栈上分配的代码、静态数据和变量的大小。
标签: c++ c memory-management valgrind memory-footprint