Есть ли утечки памяти в Linux? - PullRequest
1 голос
/ 18 июля 2011

Этот вопрос носит чисто теоретический характер.

Мне было интересно, может ли исходный код Linux иметь утечки памяти, и как они отлаживали его, учитывая, что это, в конце концов, Linuxимеет дело с памятью каждой программы?

Я, очевидно, понимаю, что Linux, написанный на C, должен иметь дело с malloc и free.Я не понимаю, как мы измеряем утечки памяти в операционной системе.

Обратите внимание, что этот вопрос не относится к Linux;он также решает соответствующие проблемы в Windows и MacOS X (Дарвин).

Ответы [ 3 ]

3 голосов
/ 18 июля 2011

Довольно часто неосновные драйверы и промежуточное дерево имеют утечки памяти.Следуйте LKML, и вы можете увидеть случайные исправления ошибок в сетевом коде для угловых случаев, обрабатывающих списки SKB.

Из-за природы ядра большая часть работы заключается в проверке и рефакторинге кода, но работа над этим еще не завершена.другие инструменты:

http://www.linuxfoundation.org/en/Google_Summer_of_Code#kmemtrace_-_Kernel_Memory_Profiler

В некоторых случаях вы можете использовать фреймворки, такие как Usermode Linux, а затем использовать обычные инструменты, такие как Valgrind, чтобы попытаться заглянуть в работающий код:

http://user -mode-linux.sourceforge.net /

1 голос
/ 19 июля 2011

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

В Linux есть отладчик ядра, который помогает отследить эти вещи, но нужно обнаружить, что они существуют, прежде чем можно будет их отследить.Обычно, как только ошибка обнаружена и может быть воспроизведена по желанию, ее становится намного легче исправить (условно говоря! Очевидно, вам нужен хороший кодер для выполнения этой работы).Самое сложное - найти ошибки в первую очередь и создать надежные тестовые примеры, которые их демонстрируют.Здесь вам нужна квалифицированная команда QA.

Так что, я думаю, короткая версия этого ответа такова, что хорошее QA - это так же важно, как хорошее кодирование.

1 голос
/ 18 июля 2011

Реализация malloc и free (на самом деле brk / sbrk, поскольку malloc и free реализуются внутрипроцессным libc) не являются волшебными или особенными - это просто код, как и все остальное, и за этим стоят структуры данных, которыеопишите сопоставления.

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

...