【问题标题】:Get the amount of memory allocated by malloc获取malloc分配的内存量
【发布时间】:2012-02-11 08:52:05
【问题描述】:

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

【问题讨论】:

标签: c malloc


【解决方案1】:

没有标准的、操作系统中立的、时尚的方式。

但是使用 GNU Glibc 你有mallinfo

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

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

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

【讨论】:

    【解决方案2】:

    通过特定malloc,是的,你有你要求的那么多内存,没有更多:-)

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          使用valgrind 帮助调试潜在的内存泄漏。

          在你想做一些C调试时,glibc有一些功能可以帮助你用malloc进行调试。

          ma​​lloc 挂钩

          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

          【讨论】:

            猜你喜欢
            • 2012-12-26
            • 2013-02-23
            • 2011-06-24
            • 2020-12-14
            • 2021-03-13
            • 1970-01-01
            • 2017-12-05
            • 2013-07-04
            • 1970-01-01
            相关资源
            最近更新 更多