如何在 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_malloc
和 my_free
来跟踪分配和释放的内存。但是当需要修改太多行代码时,它不是一个实用的选择。令人望而却步的是,这个包装函数无法处理使用 new
和 delete
的情况。
有 1 个相关问题 Get peak amount of memory used by a C program。但它只是关于 Windows 系统,并不特别关心堆内存使用情况。一些答案表明使用 getrusage
。然而,我谷歌了一下,发现它显然无法告诉堆使用情况。
两者都
Statistics for Memory Allocation with malloc
或
注意:检查符合部分。
另一个噱头(在终端):
cat /proc/meminfo
free
(来自 procps 包,使用 /proc/meminfo,参见 https://gitlab.com/procps-ng/procps/-/blob/master/proc/sysinfo.c 函数 meminfo
中的第 698 行)
我想知道运行一个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_malloc
和 my_free
来跟踪分配和释放的内存。但是当需要修改太多行代码时,它不是一个实用的选择。令人望而却步的是,这个包装函数无法处理使用 new
和 delete
的情况。
有 1 个相关问题 Get peak amount of memory used by a C program。但它只是关于 Windows 系统,并不特别关心堆内存使用情况。一些答案表明使用 getrusage
。然而,我谷歌了一下,发现它显然无法告诉堆使用情况。
两者都
Statistics for Memory Allocation with malloc
或
注意:检查符合部分。
另一个噱头(在终端):
cat /proc/meminfo
free
(来自 procps 包,使用 /proc/meminfo,参见 https://gitlab.com/procps-ng/procps/-/blob/master/proc/sysinfo.c 函数meminfo
中的第 698 行)