【问题标题】:Get peak heap memory usage of a c program in Linux system获取Linux系统中c程序的峰值堆内存使用率
【发布时间】:2021-09-17 20:59:45
【问题描述】:

我有一个 c 程序,比如a.out。我可以使用类似的工具吗:

  1. 疑问句:
>$ peak-memory ./a.out  
Peak heap memory allocated: 12345678 Bytes

具体来说,这是在Linux系统中。

另一个类似的问题是我可以在我的源程序中插入一个片段代码,每次执行它都会报告当前的堆内存使用情况。喜欢:
2. 疑问句:

int main(){
    int *a = (int*) malloc(12);
    // some code...
    print_heap_usage();
    // other code...
}

我知道我可以使用包装器my_mallocmy_free 函数来跟踪分配和释放到全局变量的内存。但是对于别人的源代码是不实用的,我可能需要修改它的很多源代码。而且我不能再使用newdelete

我搜索了stackoverflow,有一个相关的问题Get peak amount of memory used by a C program 但它询问了Windows系统并且并不特别关心堆内存使用情况。有些回答说要使用getrusage,我google了一下,发现它不能告诉堆使用情况。

【问题讨论】:

  • 你确定你需要 malloc 堆吗?如果程序也使用mmap 分配内存怎么办?只知道峰值驻留集大小是否有用?
  • 是的,只是 malloc/free heap 和 new/delete heap。我不考虑 mmap 。只是好奇,如果我考虑mmap,答案有什么不同。
  • 一个问题是只询问通过malloc/new 分配的内存,另一个是询问所有动态分配的来源。原因是“最大驻留集大小”是对进程对系统影响的完整度量(并且最大 RSS - 共享大小对于理解可伸缩性很有用)。这些是针对所有进程收集的统计信息。
  • @Useless 我正在对我的程序进行内存分析。我想知道峰值堆内存使用情况,这样我就可以知道它是否可以在计算机上运行。我只是谷歌RSS,并且怀疑我的计算机是否有最大4GB RAM,我的程序是否完全分配了4.5GB RAM(我不会使用mmap的东西),是否有一些交换空间可以用来制作程序运行,或者它只是在 malloc 上失败并退出。
  • 如果你想知道它是否会在计算机上运行,​​你肯定需要知道使用的总内存吗?

标签: c memory-management heap-memory glibc


【解决方案1】:

要么

Statistics for Memory Allocation with malloc

malloc_stats

注意:检查符合部分。

另一个噱头(终端):

【讨论】:

    猜你喜欢
    • 2018-05-28
    • 2014-12-01
    • 2018-10-28
    • 2010-10-20
    • 2019-10-19
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    相关资源
    最近更新 更多