Valgrind没有检测到HDF5泄漏的资源

时间:2018-07-30 16:40:44

标签: memory-leaks valgrind hdf5

我注意到Valgrind并未检测到使用HDF5的C API创建的资源,并且在程序结束之前没有关闭这些资源,尽管我使用--leak-check = full选项启动了它。那正常吗?

在交付代码之前,我经常依靠Valgrind,但是今天,当我查看未被代码检测到的代码时,我感到惊讶和沮丧。

1 个答案:

答案 0 :(得分:2)

valgrind memcheck工具检测由“标准”分配器分配/释放的内存,例如malloc / free / new / delete /...

如果HDF5的C API未(内部)使用上述标准分配器, 则valgrind不可能自行猜测要监视的内容。

如果HDF5正在实施自己的堆管理(例如,基于mmap, 这些块放在较小的已分配块中), 然后valgrind提供“客户端请求”,从而提供一些valgrind支持 对于此类非标准分配器。但这一切都意味着HDF5需要做一些工作 来源。

例如参见http://www.valgrind.org/docs/manual/mc-manual.html#mc-manual.mempools 有关如何描述此类非标准分配器的更多信息。

一些正在实现自己的非标准分配器的库/工具 有时有一种方法(例如环境变量)来指示绕过 这些非标准分配器,仍然使用malloc / free / ... 同样,由HDF5来提供。

如果现在HDF5确实使用标准分配器,并且valgrind无法跟踪 它做什么,然后在valgrind bugzilla上提交错误。