Valgrind 未检测到 HDF5 泄漏资源
Valgrind is not detecting HDF5 leaked resources
我注意到 Valgrind 没有检测到使用 HDF5 的 C API 创建的资源,并且这些资源在程序结束之前没有关闭,尽管我使用选项 --leak-check= 启动了它满的。这正常吗?
我经常在发布代码之前依赖 Valgrind,但今天在审查代码时发现它没有被它检测到,我感到很惊讶和沮丧。
valgrind memcheck 工具通过 'standard' 分配器检测内存 allocated/released,例如 malloc/free/new/delete/...
如果 HDF5 的 C API 没有使用(内部)上述标准分配器,
那么 valgrind 无法自行猜测要监视的内容。
如果 HDF5 正在实施自己的堆管理(e.g.based 在 mmap 上,并且切割
这些块在较小的分配块中),
然后 valgrind 提供 'client requests' 允许有一些 valgrind 支持
对于此类非标准分配器。但这一切都意味着 HDF5 中的一些工作
来源。
参见例如http://www.valgrind.org/docs/manual/mc-manual.html#mc-manual.mempools
有关如何描述此类非标准分配器的更多信息。
一些 libraries/tools 正在实现自己的非标准分配器
有时有一种方法(例如环境变量)指示绕过
这些非标准分配器,并且仍然使用 malloc/free/...
同样,直到 HDF5 才能提供此功能。
如果现在 HDF5 真的使用标准分配器并且 valgrind 无法跟踪
它做了什么,然后在 valgrind bugzilla 上提交错误。
我注意到 Valgrind 没有检测到使用 HDF5 的 C API 创建的资源,并且这些资源在程序结束之前没有关闭,尽管我使用选项 --leak-check= 启动了它满的。这正常吗?
我经常在发布代码之前依赖 Valgrind,但今天在审查代码时发现它没有被它检测到,我感到很惊讶和沮丧。
valgrind memcheck 工具通过 'standard' 分配器检测内存 allocated/released,例如 malloc/free/new/delete/...
如果 HDF5 的 C API 没有使用(内部)上述标准分配器, 那么 valgrind 无法自行猜测要监视的内容。
如果 HDF5 正在实施自己的堆管理(e.g.based 在 mmap 上,并且切割 这些块在较小的分配块中), 然后 valgrind 提供 'client requests' 允许有一些 valgrind 支持 对于此类非标准分配器。但这一切都意味着 HDF5 中的一些工作 来源。
参见例如http://www.valgrind.org/docs/manual/mc-manual.html#mc-manual.mempools 有关如何描述此类非标准分配器的更多信息。
一些 libraries/tools 正在实现自己的非标准分配器 有时有一种方法(例如环境变量)指示绕过 这些非标准分配器,并且仍然使用 malloc/free/... 同样,直到 HDF5 才能提供此功能。
如果现在 HDF5 真的使用标准分配器并且 valgrind 无法跟踪 它做了什么,然后在 valgrind bugzilla 上提交错误。