获取malloc分配的内存量

时间:2012-02-11 08:52:05

标签: c malloc

有没有一种简单的方法可以知道程序中每个malloc分配的内存总量? 我正在遭遇内存泄漏,我想知道它在哪里。

5 个答案:

答案 0 :(得分:3)

标准的,操作系统中立,时尚无法实现。

但是使用GNU Glibc,你有mallinfo

在Linux系统上,您可以通过/proc/self/maps(或/proc/self/smaps提供更多详细信息)伪文件了解您的虚拟内存映射。对于pid 123的处理,您可以阅读/proc/123/maps

当然,细节是系统特定的。

要查找内存泄漏,请使用valgrind

等工具

答案 1 :(得分:1)

通过特定的 malloc,是的,您拥有的内存与您要求的一样多,而且不再: - )

实际上,它可能给你你多一点(很多实现会给你16或32字节的倍数)但是没有办法在标准C中告诉你多少。使用比你要求的更多的是未定义的行为,无论进行何种填充。

有些系统有一个mallinfo函数,如果你想知道已经分配了多少内存,你可以调用它来获取整个内存领域的统计数据。你可以调查一下,但同样,它不是标准的。

答案 2 :(得分:0)

没有标准方法可以这样做。 Microsoft的C库具有_heapwalk函数,您可以使用它来计算它。

答案 3 :(得分:0)

你首先分配了内存,只需记下多少内存。也许使用结构来存储指针和大小。

答案 4 :(得分:0)

使用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