4

编写我自己的 malloc() 版本(和他最好的朋友 free() 先生),我需要知道我是否正确地释放了我的记忆。似乎我不能使用 valgrind,因为它会检查 libc'malloc,而我的位于加载了 LD_PRELOAD 的共享库中。

目前,如果我使用 valgrind,它会显示“0alloc 0free 0leak,一切都很好”,因为它没有检测到我对我的 malloc 所做的分配。(我使用 (s)brk() 函数)

有人知道是否有办法检查 valgrind 或其他东西吗?

谢谢 !

4

1 回答 1

1

看起来有两种可能的解决方案:

--soname-同义词

如果您的自定义分配器函数仍称为 malloc() 和 free(),请使用--soname-synonyms命令行参数告诉 Valgrind 在您的预加载库中查找这些函数。然后它可以自动拦截对这些函数的调用。例子:

--soname-synonyms=somalloc=mymalloclib.so

有关详细信息,请参阅http://valgrind.org/docs/manual/manual-core.html#manual-core.rareopts

客户请求

如果你有一个更复杂的自定义分配器(使用不同于 malloc()/free() 的 API),你可以在你的 malloc()/free() 实现中使用特殊的“客户端请求”来告诉 Valgrind 你的内存结构水池。有关详细信息,请参阅http://valgrind.org/docs/manual/mc-manual.html#mc-manual.mempools

我还没有测试过这两种解决方案:-)所以很高兴听到它是否真的适合你。

于 2014-02-05T09:51:59.710 回答