【发布时间】:2023-03-27 20:01:01
【问题描述】:
其实我的代码有malloc。我正在使用 ubuntu 操作系统,我想知道使用了多少堆内存?
是否有任何命令可以让我找到正在运行的进程在 ubuntu OS 中使用了多少堆?
现在说 malloc 处于无限循环中,它在一个终端中运行并使用另一个终端我想知道该正在运行的进程占用了多少堆内存
【问题讨论】:
标签: c command heap-memory ubuntu-10.04
其实我的代码有malloc。我正在使用 ubuntu 操作系统,我想知道使用了多少堆内存?
是否有任何命令可以让我找到正在运行的进程在 ubuntu OS 中使用了多少堆?
现在说 malloc 处于无限循环中,它在一个终端中运行并使用另一个终端我想知道该正在运行的进程占用了多少堆内存
【问题讨论】:
标签: c command heap-memory ubuntu-10.04
你可以使用 /proc 文件系统
/proc/pid/shmam
它会准确地告诉你当时它使用了多少内存。
详细输入请参考
https://serverfault.com/questions/48582/how-is-memory-usage-reported-in-linux
How to measure actual memory usage of an application or process?
【讨论】:
如果您真的想知道您的应用程序实际使用了多少内存,您需要在分析器中运行它。例如,valgrind 可以让您了解已使用的内存量,更重要的是,了解您的程序中可能存在的内存泄漏。
调查, http://valgrind.org/docs/manual/mc-manual.html
Valgrind 基本上是一个 x86 模拟器,它检查内存的所有读取和写入,拦截所有分配和释放内存的调用。 valgrind的memcheck工具可以检测到:
1) 使用未初始化的内存,
2) 在内存被释放后读/写内存
3) 读/写 malloc'd 块的末尾
4) 读取/写入堆栈下方的不适当区域。
5) 内存泄漏
6) malloc/new/new[] 与 free/delete/delete[] 的不匹配使用
7) memcpy() 和相关函数中重叠src和dst指针
8) 双重释放内存
9) 将不可寻址字节传递给系统调用
【讨论】: