如何在 Linux 系统中获取 C/C++ 程序的动态分配内存使用峰值

How to get the peak dynamicly allocated memory usage of a C/C++ program in Linux system

我想知道运行一个C/C++程序后动态分配内存使用量的峰值(已经取消释放内存使用量)。

1(初始问题):

给定一个 C/C++ 程序 a.out。任何工具都可以以如下方式报告动态分配的内存使用峰值:

>$ peak-memory ./a.out  
Peak dynamically allocated memory size: 12345678 Bytes

2(备选题):

我能不能在源程序中插入一个snippit代码,这样每次执行时,它都会在我想要的地方报告当前堆内存使用情况。这看起来像:

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

我的研究:

我知道我可以使用包装函数,例如 my_mallocmy_free 来跟踪分配和释放的内存。但是当需要修改太多行代码时,它不是一个实用的选择。令人望而却步的是,这个包装函数无法处理使用 newdelete 的情况。

有 1 个相关问题 Get peak amount of memory used by a C program。但它只是关于 Windows 系统,并不特别关心堆内存使用情况。一些答案表明使用 getrusage。然而,我谷歌了一下,发现它显然无法告诉堆使用情况。

两者都

Statistics for Memory Allocation with malloc

malloc_stats

注意:检查符合部分。

另一个噱头(在终端):