我注意到,Valgrind没有检测到使用HDF5的C创建的资源,这些资源在程序结束之前没有关闭,尽管我使用--leak check=full选项启动了它。这正常吗?
在发布代码之前,我经常依赖于Valgrind,但今天当我检查代码时,我感到惊讶和沮丧,因为它没有检测到它。
发布于 2018-08-01 05:37:16
valgrind memcheck工具检测由‘标准’分配器分配/释放的内存,比如malloc/free/new/delete/...
如果HDF5的C没有(在内部)使用上面的标准分配器,那么valgrind就不可能自己猜测要监视什么。
如果HDF5实现了自己的堆管理( mmap上的e.g.based,并将这些块分成较小的已分配块),那么valgrind就会提供“客户端请求”,从而允许valgrind对此类非标准分配器提供一些valgrind支持。但这一切都意味着在HDF5源代码中做了一些工作。
有关如何描述此类非标准分配器的更多信息,请参见例如http://www.valgrind.org/docs/manual/mc-manual.html#mc-manual.mempools。
一些正在实现自己的非标准分配器的库/工具有时会有一种方法(例如环境变量)来指示绕过这些非标准分配器,并且仍然使用malloc/free/...同样,由HDF5来提供这一点。
如果现在HDF5真的使用标准的分配器,并且valgrind无法跟踪它所做的事情,那么就在valgrind bugzilla上提交一个bug。
https://stackoverflow.com/questions/51598654
复制相似问题