требуется помощь в отношении утечки памяти - PullRequest
0 голосов
/ 18 ноября 2010


мое приложение вызывает утечку памяти на 10 МБ при первом тайм-ауте.Слушай, я использую функции таймера Linux (timer_create и т. Д.).
Для последующих таймаутов никаких проблем не возникаетЯ сомневаюсь в какой-то проблеме с таймерами Linux.
Я отладил ее с помощью valgrind и cleany.Даже эти инструменты мне не помогут.В обоих инструментах утечка памяти отображается в виде нескольких килобайт.Но мое приложение вызывает утечку памяти в 10 МБ в первый раз.
Если кто-то сталкивался с этой проблемой ранее, пожалуйста, помогите мне.

1 Ответ

2 голосов
/ 18 ноября 2010

Чтобы выяснить, какие биты вашего кода вызывают утечку (если таковые имеются), скомпилируйте ваш код, включив в него символы отладки (т. Е. Включите флаг -g, если вы используете gcc), затем запустите вашу программу через Valgrind .

valgrind --leak-check=full ./your_program

Выполнение займет немного больше времени, чем обычно, но когда ваша программа завершится, вывод valgrind должен сообщить вам, сколько памяти вы вытекли и где находятся culrit.

Пример вывода:

==10934== HEAP SUMMARY:
==10934==     in use at exit: 10 bytes in 10 blocks
==10934==   total heap usage: 10 allocs, 0 frees, 10 bytes allocated
==10934== 
==10934== 10 bytes in 10 blocks are definitely lost in loss record 1 of 1
==10934==    at 0x4024F20: malloc (vg_replace_malloc.c:236)
==10934==    by 0x8048402: main (a.c:8)
==10934== 
==10934== LEAK SUMMARY:
==10934==    definitely lost: 10 bytes in 10 blocks
==10934==    indirectly lost: 0 bytes in 0 blocks
==10934==      possibly lost: 0 bytes in 0 blocks
==10934==    still reachable: 0 bytes in 0 blocks
==10934==         suppressed: 0 bytes in 0 blocks

обновление

Поскольку вы уже используете valgrind, возможно, вы можете попробовать использовать инструмент Massif, который поставляется с ним. Он должен быть в состоянии нарисовать более точную картину использования памяти (по сравнению с простым просмотром сверху).

Ознакомьтесь с этим руководством , чтобы узнать, как его можно использовать. Вам могут понадобиться некоторые дополнительные опции, чтобы получить разумный график в зависимости от времени выполнения и использования памяти вашей программой. Некоторые полезные опции описаны несколькими страницами позже в руководстве.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...