Valgrind не обнаруживает утечку HDF5 ресурсов

Я заметил, что Valgrind не обнаруживает ресурсы, созданные с помощью C API HDF5, и которые не закрываются до конца программы, хотя я запустил его с опцией --leak-check=full. Это нормально?

Я часто полагаюсь на Valgrind перед отправкой кода, но сегодня я был удивлен и расстроен, просматривая код, что он не был обнаружен им.

1 ответ

Решение

Утилита valgrind memcheck обнаруживает память, выделенную / освобожденную "стандартными" распределителями, такими как malloc / free / new / delete /...

Если C API HDF5 не использует (внутренне) вышеупомянутые стандартные распределители, тогда Valgrind не сможет сам догадаться, что отслеживать.

Если HDF5 реализует свое собственное управление кучей (например, на основе mmap и разрезает эти блоки на меньшие выделенные блоки), тогда valgrind предоставляет "клиентские запросы", позволяющие иметь некоторую поддержку valgrind для таких нестандартных распределителей. Но это все подразумевает некоторую работу с источниками HDF5.

См., Например, http://www.valgrind.org/docs/manual/mc-manual.html для получения дополнительной информации о том, как описать такие нестандартные распределители.

У некоторых библиотек / инструментов, которые реализуют свои собственные нестандартные распределители, иногда есть способ (например, переменная среды) указать, чтобы обойти эти нестандартные распределители, и все еще используют malloc / free /... Опять же, вплоть до HDF5, чтобы обеспечить это.

Если сейчас HDF5 действительно использует стандартные распределители и valgrind не может отследить, что он делает, тогда отправьте сообщение об ошибке в valgrind bugzilla.

Другие вопросы по тегам