【问题标题】:how to make sure all malloc'd memory has been freed?如何确保所有 malloc 的内存已被释放?
【发布时间】:2021-03-09 16:31:59
【问题描述】:

我想知道是否有办法知道当前使用的 malloc 内存的大小,以便我可以在运行测试之前和之后进行比较,以确保所有内存都已被释放。像这样的:

size_t nmembytes_before = malloc_bytes_allocated();
... do your tests ...
size_t nmembytes_after = malloc_bytes_allocated();
if (nmembytes_before != nmembytes_after)
{
    ... error reporting ...
}

这样的事情是否存在,或者我们是否被降级为使用 valgrind 进行所有内存分析?

【问题讨论】:

  • 您可以轻松地为 mallocfree 编写自己的简单包装器来进行会计处理。
  • 这是个好主意。调用 my_malloc 时很容易添加到计数中,但调用 my_free 时很难从计数中减去(因为对象的大小无法从指针中轻松确定)
  • 你也可以考虑使用valgrind运行你的测试

标签: c malloc heap-memory


【解决方案1】:

许多堆允许您获取有关分配的统计信息。 Glibc 提供:https://www.gnu.org/software/libc/manual/html_node/Statistics-of-Malloc.html#Statistics-of-Malloc

这应该允许您测试是否所有分配的字节都已被释放

【讨论】:

  • 不幸的是,这些统计信息中的信息似乎都没有返回实际的保留字节数。我做了一个基本上是免费的测试(malloc(1024)),之前和之后有很大的不同。不过,这里有一些有用的信息。
  • Uordblks 应该是你所需要的。
猜你喜欢
  • 2020-11-18
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 2021-04-28
  • 1970-01-01
  • 2016-11-16
相关资源
最近更新 更多