Почему утечки памяти распространены?

Действительно ли это происходит из-за основных неверных толкований того, как память динамично выделена и освобождена на части программиста? Действительно ли это происходит из-за самодовольства?

8
задан Brandon 27 January 2010 в 07:17
поделиться

5 ответов

Нет. Это связано с огромным объемом учета, который требуется для отслеживания каждого выделения памяти. Кто отвечает за выделение памяти? Кто отвечает за ее освобождение? Обеспечение того, чтобы вы использовали один и тот же API для выделения и освобождения памяти и т.д.... Гарантия того, что вы поймаете все возможные потоки программ и очистите их в каждой ситуации (например, убедитесь, что вы очистили память после того, как поймали ошибку или исключение). Список продолжается...

15
ответ дан 5 December 2019 в 07:35
поделиться

В проекте приличного размера можно потерять отслеживание выделенных ресурсов.

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

Утечки памяти вызваны основными недоразумениями в том же смысле каждый ошибка. И я был бы шокирован, чтобы выяснить, что кто-то впервые записывает код ошибки в первый раз каждый раз. Утечки памяти просто произошли такую ​​ошибку, которая редко вызывает аварийное или явное неправильное поведение (кроме того, кроме того, чтобы использовать слишком много памяти, конечно), поэтому, если утечки памяти явно проверены для разработчика, вероятно, никогда не знают, что они присутствуют. Учитывая, что изменения в кодовой базе всегда добавляют ошибки, а утечки памяти практически невидимы, утечки памяти расширяются в качестве веков программы и расширяются по размеру.

Даже на языках, которые имеют автоматическое управление памятью, память может быть утечкована из-за циклических ссылок, в зависимости от используемого алгоритма сборки мусора.

3
ответ дан 5 December 2019 в 07:35
поделиться

Я думаю, что это связано с давлением работы в работе, которая требует мертвых и верхних управлений, толкая проект, чтобы вывести его в дверь. Таким образом, вы можете себе представить, с тестированием, отзывов о Q & A, отзывы о сверстниках, в таких условиях под давлением, что утечки памяти могут проскользнуть через сеть.

Поскольку ваш вопрос не упомянул язык, сегодня, сегодня есть автоматическое управление памятью, которое заботится о учетной записи / отслеживании памяти, чтобы гарантировать, что не возникают утечки памяти, подумайте о Java / .NET, но несколько могут проскользнуть через сеть. Это было бы с помощью таких как C / C ++, которые используются Malloc / , новые функции , и неизменно сложнее, чтобы проверить, из-за выделенного объема частоты памяти.

Опять же, отслеживание этих утечек может быть трудно найти, что бросает другое кривоебол к этому ответу - это то, что он работает на машине Dev, что она не появляется, но когда в производстве память начинает утечку Как ада, это конфигурация, аппаратное обеспечение, конфигурация программного обеспечения или хуже, утечка памяти может появиться в случайной ситуации, которая уникальна в пределах производственной среды, или это ограничение времени / затрат, что позволило утечки памяти или Это то, что инструменты Profile Profile Profile Cost являются затратыми или отсутствием финансирования, чтобы помочь утечку команды Dev Team ...

все вообще, каждый и все в команде Dev, несут свою ответственность за работу кода, и Знать правила управления памятью (например, , например, для каждого malloc , должно быть бесплатно , для каждого new Там должен быть удалить ), но никакой вины не следует учитывать для чая Dev М сами, ни один палец указывает на управление для «накапливаемого на давление на команду Dev».

В конце дня было бы ложная экономика, чтобы полагаться только на команду Dev и размещать «самоуспокоенность» на своих плечах.

Надеюсь, это поможет, С уважением, Том.

2
ответ дан 5 December 2019 в 07:35
поделиться

Отсутствие структурированных областей и четкое право собственности на выделенную память.

1
ответ дан 5 December 2019 в 07:35
поделиться
  1. ошибки.

  2. Даже без ошибок можно невозможно заранее знать, какая функция должна освободить память. Это достаточно легко, если структура кода по существу функционально (основные функции вызывают подпункты, которые обрабатывают данные, которые затем возвращают результат), но это не тривиально, если несколько протекторов (или несколько разных объектов) разделяют кусок памяти. Смарт-указатели могут быть использованы (в C ++), но в противном случае это более или менее невозможно.

  3. Утечки не худший вид ошибки. Их эффект, как правило, просто совокупная деградация в производительности (пока вы не закончите память), поэтому они просто не так высоки приоритетным.

1
ответ дан 5 December 2019 в 07:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: