【问题标题】:Memory footprint profiling内存占用分析
【发布时间】: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


【解决方案1】:

您的开发环境应该有某种链接器选项。通常在这种情况下,您可以指示它创建链接映射。您要查找的信息很可能在链接图中,或者可以根据链接图中的信息计算得出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多