pthread_create утечка памяти - PullRequest
2 голосов
/ 23 июня 2010

Я использую язык C и Linux в качестве платформы программирования.

В моем приложении я вызываю pthread_create. Затем я проверяю использование памяти моим приложением с помощью инструмента командной строки ps, и в столбце VSZ добавляется 4.

Но проблема в том, что при выходе из обработчика функции pthread_create 4, добавленная в память, не была освобождена. Затем, когда приложение снова вызывает pthread_create, значение 4 снова добавляется, пока оно не станет больше.

Я попробовал pthread_join, и кажется, что память все еще увеличивается.

Спасибо.

Ответы [ 3 ]

9 голосов
/ 23 июня 2010

ps не подходит для измерения утечек памяти. Когда вы освобождаете память, вам не гарантируется уменьшение размера процесса как из-за фрагментации памяти, так и во избежание ненужных системных вызовов.

valgrind - лучший инструмент для использования.

6 голосов
/ 23 июня 2010

Вы должны использовать либо pthread_detach, либо pthread_join (но не оба) в каждой создаваемой вами pthread. pthread_join ожидает завершения потока; pthread_detach указывает, что вы не собираетесь ждать его (следовательно, реализация может свободно восстанавливать хранилище, связанное с потоком, когда он завершается).

То же самое сказал Артелиус о том, что ps не является подходящим инструментом для диагностики утечек памяти.

3 голосов
/ 23 июня 2010

Когда вы говорите
Но проблема в том, что обработчик функции pthread_create завершает работу

Вы делаете явный pthread_exit (NULL) как часть выхода после завершения потокаисполнение?Кроме того, процедура pthread_exit () не закрывает файлы, которые вы могли открыть в своем потоке;любые файлы, открытые внутри потока, останутся открытыми даже после завершения потока.

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