У меня есть несколько тестов, и в конце я запускаю Valgrind, чтобы проверить использование памяти моих библиотек. Valgrind постоянно жалуется на:
==27022== HEAP SUMMARY:
==27022== in use at exit: 6,139 bytes in 3 blocks
==27022== total heap usage: 609 allocs, 606 frees, 19,877,073 bytes allocated
==27022==
==27022== 32 bytes in 1 blocks are still reachable in loss record 1 of 3
==27022== at 0x4A08121: calloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==27022== by 0x3A1A60168F: _dlerror_run (in /usr/lib64/libdl-2.17.so)
==27022== by 0x3A1A601197: dlsym (in /usr/lib64/libdl-2.17.so)
==27022== by 0x3A9D8A796D: ??? (in /usr/lib64/nvidia/libGL.so.331.67)
==27022== by 0x3A9DAE965F: ??? (in /usr/lib64/nvidia/libGL.so.331.67)
==27022== by 0x3A9DB1CB1F: ???
==27022== by 0x3A9D8CD36A: ??? (in /usr/lib64/nvidia/libGL.so.331.67)
==27022==
==27022== 83 bytes in 1 blocks are still reachable in loss record 2 of 3
==27022== at 0x4A06409: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==27022== by 0x3A1A2863F9: strdup (in /usr/lib64/libc-2.17.so)
==27022== by 0x3A9D8A964E: ??? (in /usr/lib64/nvidia/libGL.so.331.67)
==27022== by 0x6578652F32322F: ???
==27022==
==27022== 6,024 bytes in 1 blocks are definitely lost in loss record 3 of 3
==27022== at 0x4A08121: calloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==27022== by 0x3A9D8C032E: ??? (in /usr/lib64/nvidia/libGL.so.331.67)
==27022==
==27022== LEAK SUMMARY:
==27022== definitely lost: 6,024 bytes in 1 blocks
==27022== indirectly lost: 0 bytes in 0 blocks
==27022== possibly lost: 0 bytes in 0 blocks
==27022== still reachable: 115 bytes in 2 blocks
==27022== suppressed: 0 bytes in 0 blocks
Это не похоже на мою библиотеку. Должен ли я быть обеспокоен предупреждениями тезисов?
Или я должен пытаться подавить эти утечки? Если бы я подавил, что было бы самым чистым способом сделать это из Makefile?
Трудно сказать, следует ли вам их подавлять или нет, но если вы уверены, что ваша библиотека чиста, вы можете сгенерировать файл подавления.
Затем вы можете вызвать Valgrind с флагом —suppressions. Если имя вашего файла подавления является suppfile:
> valgrind --suppressions=suppfile ./program
Если вы выполняете valgrind из Makefile, добавьте флаг подавления в команду valgrind. Вы также можете создать файл опций по умолчанию «.valgrindrc», который вы помещаете в тот же каталог, что и ваш Makefile. В этом файле укажите любые аргументы, которые вы хотите.