Сравнение valgrind, massif, top и pmap

Я пытаюсь понять, протекает ли мое приложение.

При запуске моего приложения я периодически запускаю pmap и наблюдать:

mapped: 488256K    writeable/private: 90144K    shared: 0K
mapped: 488260K    writeable/private: 101912K    shared: 0K
mapped: 488256K    writeable/private: 102708K    shared: 0K
mapped: 488260K    writeable/private: 105112K    shared: 0K

я бегу top и наблюдать:

VIRT    RES     SHR
488260  17684   3020
488256  20060   3032
488256  22700   3032
488256  26132   3032
488256  28772   3032
488256  31880   3032

Увеличение "RES" и "доступный для записи / частный" - вот что заставляет меня подозревать утечку. Тем не менее, работает valgrind Я не обнаруживаю какой-либо серьезной утечки, и когда я прекращаю выполнение, я постоянно вижу около 20 МБ доступной памяти:

==19998== 
==19998== HEAP SUMMARY:
==19998==     in use at exit: 20,351,513 bytes in 974 blocks
==19998==   total heap usage: 329,404 allocs, 328,430 frees, 34,562,346 bytes allocated
==19998== 
==19998== LEAK SUMMARY:
==19998==    definitely lost: 63 bytes in 4 blocks
==19998==    indirectly lost: 0 bytes in 0 blocks
==19998==      possibly lost: 4,679 bytes in 76 blocks
==19998==    still reachable: 20,346,771 bytes in 894 blocks
==19998==         suppressed: 0 bytes in 0 blocks
==19998== Rerun with --leak-check=full to see details of leaked memory
==19998== 
==19998== For counts of detected and suppressed errors, rerun with: -v
==19998== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

я бегу valgrind --tool=massif а также увидеть 20Mb flat:

визуализация массива

ВОПРОС: Может кто-нибудь объяснить, почему valgrind и массив говорят мне, что моя программа использует 20 Мб памяти постоянно, но top и pmap говорят, что использование растет?

1 ответ

Решение

Чтобы понять, почему топовые шоу увеличиваются для вашего процесса, вам также необходимо проанализировать распределение памяти в вашей программе с valgrind --pages-as-heap=yes, Вы поймете, почему происходит увеличение. Именно так top измеряет потребление памяти процессом. http://valgrind.org/docs/manual/ms-manual.html. И с valgrind --pages-as-heap=yes вы увидите, где эти распределения сделаны в вашей программе

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