1)是否还有所谓的内存泄漏工具Boehmgc
?该工具与其他工具相比如何?
2) 我用过LeakTracer
,mudflap
和Valgrind
. 但不幸的是 LeakTracer 有内存占用的缺点(在开始时池化大量内存然后分配它),那么有什么替代方案呢?
1)是否还有所谓的内存泄漏工具Boehmgc
?该工具与其他工具相比如何?
2) 我用过LeakTracer
,mudflap
和Valgrind
. 但不幸的是 LeakTracer 有内存占用的缺点(在开始时池化大量内存然后分配它),那么有什么替代方案呢?
Boehm GC是一个垃圾收集器,类似于 Java 中的垃圾收集。您提到的其他工具旨在警告您有关泄漏,以便您可以采取纠正措施。垃圾收集旨在在程序运行时查找和恢复不再使用的分配。示例(来自维基百科页面):
#include <assert.h>
#include <stdio.h>
#include <gc.h>
int main(void)
{
int i;
GC_INIT();
for (i = 0; i < 10000000; ++i)
{
// GC_MALLOC instead of malloc
int **p = GC_MALLOC(sizeof(int *));
int *q = GC_MALLOC_ATOMIC(sizeof(int));
assert(*p == 0);
// GC_REALLOC instead of realloc
*p = GC_REALLOC(q, 2 * sizeof(int));
if (i % 100000 == 0)
printf("Heap size = %zu\n", GC_get_heap_size());
}
// No free()
return 0;
}
就个人而言,在 C 或 C++ 中使用垃圾收集有些让我很不安。对于 C++,“智能指针”是我认为在所有权不明确的情况下(尽管您可能想要了解为什么在您的设计中不清楚)和异常安全方面的帮助(例如,现在已弃用std::auto_ptr
的情况)的方法专为)
至于检漏仪,您可以添加:
到你的 Linux 列表。
相关的内存检查工具,但不是泄漏: