Что такое утечка памяти

Утечка памяти - это уменьшение объёма доступной оперативной и виртуальной памяти за счёт ошибок в приложении, приводящих к тому, что более не нужная ему память им не освобождается и становится, таким образом, недоступной для других приложений и для него самого.

Об утечках памяти конечный пользователь обычно ничего не слышит и не знает. И, в общем-то, это действительно тот самый случай, когда справедлива пословица "меньше знаешь - крепче спишь". Тем не менее, о том, что такое утечки памяти и каким образом они влияют на работу как самого приложения, в котором присутствуют, так и всех остальных, запущенных вместе с ним, полезно знать каждому пользователю.

Утечка памяти - это уменьшение объёма доступной оперативной и виртуальной памяти за счёт ошибок в приложении, приводящих к тому, что более не нужная ему память им не освобождается. Неосвобождение памяти одним приложением приводит к невозможности для других приложений (как, впрочем, и для него самого) использовать эту память в своей работе - она, фактически, исчезает никуда, делая ещё меньшим количество и без того достаточно дефицитного системного ресурса. Характерным признаком наличия утечек памяти является падающая во времени производительность операционной системы. По причине постоянного "исчезновения" оперативной памяти ресурсов работающим приложениям начинает катастрофически не хватать, и операционной системе приходится всё чаще обращаться к возможностям виртуальной памяти. Виртуальная память намного менее производительна, чем оперативная, потому что физически располагается на жёстком диске, а, значит, и скорость доступа к ней значительно ниже. Завершается это всё в перспективе полным крахом системы и всех запущенных под её управлением приложений.

Современные языки программирования защищены от утечек памяти благодаря своей архитектуре. Дело в том, что утечки памяти - явление весьма распространённое и более чем неприятное, а потому это была одна из основных проблем, с которой старались справиться создатели новых языков программирования (таких, как Java, C# и многие другие). Тем не менее, до сих пор существует масса программ, написанных на языках программирования, не имеющих встроенных средств защиты от утечек памяти (те же C++, Delphi). С этим приходится мириться и конечным пользователям, которые вынуждены сталкиваться с последствиями ошибок в этих программах. Тем не менее, даже для таких языков программирования есть достаточно эффективные средства, позволяющие искать утечки памяти в уже написанной программе. Они, как правило, входят в пакеты, предназначенные для отладки и профилировки приложений. Программистам, пишущим программы на "небезопасных" языках, и особенно тестировщикам, проверяющим их, такие инструменты просто необходимы.

Вадим СТАНКЕВИЧ,
dreamdrusch@tut.by

 
Версия для печатиВерсия для печати

Номер: 

10 за 2009 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!