【发布时间】:2012-02-11 08:52:05
【问题描述】:
有没有一种简单的方法可以知道程序中每个 malloc 分配的内存总量? 我正遭受内存泄漏的困扰,我想知道它在哪里。
【问题讨论】:
有没有一种简单的方法可以知道程序中每个 malloc 分配的内存总量? 我正遭受内存泄漏的困扰,我想知道它在哪里。
【问题讨论】:
通过特定malloc,是的,你有你要求的那么多内存,没有更多:-)
实际上,它可能给你更多(许多实现会给你一个 16 或 32 字节的倍数),但在标准 C 中没有办法告诉你多少。使用超出您要求的内容是未定义的行为,无论使用哪种填充。
有些系统有一个mallinfo 函数,如果你想知道总共分配了多少内存,你可以调用它来获取整个内存领域的统计信息。你可以调查一下,但同样,它不是标准的。
【讨论】:
没有这样做的标准方法。 Microsoft 的 C 库有一个 _heapwalk 函数,您可以使用它来计算它。
【讨论】:
您首先分配了内存,只需记下多少。也许使用结构来存储指针和大小。
【讨论】:
使用valgrind 帮助调试潜在的内存泄漏。
在你想做一些C调试时,glibc有一些功能可以帮助你用malloc进行调试。
malloc 挂钩
http://www.gnu.org/software/libc/manual/html_node/Hooks-for-Malloc.html
堆一致性检查
http://www.gnu.org/software/libc/manual/html_node/Heap-Consistency-Checking.html
使用 malloc 分配内存的统计数据
http://www.gnu.org/software/libc/manual/html_node/Statistics-of-Malloc.html
【讨论】: