Утечка памяти происходит, когда программе не удается освободить память, которую она выделила, но больше не использует и не восстанавливаема.

Введение

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

Влияние утечек памяти

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

Среды управляемой памяти (Намеренно общий)

Среда управляемой памяти является той, где вспомогательная среда создается к использованию непосредственно памяти монитора, его выделению, восстановлению и перераспределению к программам, которые работают в нем. Для многих разработчиков это желательно, потому что это позволяет разработчикам создавать свои приложения и полагать, что надлежащий объем памяти будет выделен, при необходимости и выпущено если не. Наиболее распространенным из них является Среда выполнения, которая позволяет (и иногда вызывает), программы для выполнения в ее пространстве памяти. В действительности диспетчер памяти является просто другой программой, которая работает от имени системы, часто названной Сборщиком "мусора".

Сборщики "мусора" могут быть определенными для системы или даже определенными для языка, требуя, чтобы программы, записанные на конкретном языке, всегда выполняемом в управляемой памяти, расположили с интервалами. Вследствие того, что диспетчер памяти является программой, он ищет индикаторы неиспользованной памяти, чтобы определить, необходимо ли восстановление. Каждый диспетчер памяти имеет определенные критерии, которые он проверяет, наиболее распространенный из которых когда ни программа, ни любая ее ссылка кода (через указатель) определенный блок памяти. Без учета к определенной семантике среды, наиболее общая практика для предотвращения утечки: Удалите любую ссылку, которая больше не используется. Это значит для любого a) выпускать все указатели или b) набора явные ссылки на объект на null (в зависимости от языка).

Среды неуправляемой памяти (Намеренно общий)

Среда неуправляемой памяти - когда программа непосредственно запрашивает память от системы и ответственна за освобождение самой памяти. Самый широко известный пример этого собственного кода в C или C++. В результате популярности этих языков, malloc() стал ключевым показателем выполнения в неуправляемой среде памяти.

Неуправляемые Среды Памяти желательны для многих разработчиков, потому что программа имеет прямое управление использованием его пространства памяти. Разработчик может вытеснить информационно емкие операции и запросить блоки памяти, прежде чем они будут сразу необходимы, ослабляя некоторое давление процессора. Кроме того, у них обычно есть более глубокие знания того, как память используется их программой и может освободить память с относительной уверенностью, что это не использовано.

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

Предотвращение утечек памяти

Большинство утечек памяти вызывается методами кода или методами, которые не дополнительны к механизмам, которыми среда выделяет и освобождает память. В то время как программная технология прогрессировала, термин среда стал большим количеством жидкости, поскольку много языков имеют свои собственные механизмы для помощи системе в руководящей памяти. Даже при том, что может быть семантика, которые являются определенными для среды, большая часть предотвращения утечки основана на простых методах, которые зависят от типа среды памяти, в которой работает программа. В целом предотвращение утечек памяти требует двух важных составляющих:

  • Осведомленность о среде, в которой будет работать программа
  • Некоторое понимание того, как язык, в котором разрабатывается программа, выделяет и освобождает память

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