c-获取malloc分配的内存量



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

没有一种标准的、与操作系统无关的方式。

但有了GNU Glibc,你就有了mallinfo

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

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

要查找内存泄漏,请使用类似valgrind 的工具

通过特定的malloc,是的,您的内存和您要求的一样多,而且没有更多:-)

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

有些系统有一个mallinfo函数,如果你想知道总共分配了多少内存,你可以调用它来获取整个内存区域的统计信息。你可以调查一下,但是,这不是标准的。

没有标准的方法。微软的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

相关内容

  • 没有找到相关文章

最新更新