Освобождение в atexit ()

Этот кран t поддерживает Tron (также некоторые другие сети)

12
задан Adam Mitz 24 October 2008 в 23:17
поделиться

8 ответов

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

В C++ ответ отличается, потому что объекты могут удалить временные файлы и т.д в их деструкторах, таким образом, необходимо удостовериться, что их называют.

21
ответ дан 2 December 2019 в 02:52
поделиться

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

15
ответ дан 2 December 2019 в 02:52
поделиться

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

11
ответ дан 2 December 2019 в 02:52
поделиться

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

Принимая во внимание, что, если Вы завершаете без free()луг, данные, разбитые на страницы к диску, может умереть в мире.

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

13
ответ дан 2 December 2019 в 02:52
поделиться

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

2
ответ дан 2 December 2019 в 02:52
поделиться

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

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

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

1
ответ дан 2 December 2019 в 02:52
поделиться

На самом деле аккуратность может быть интересной, когда ваша программа развивается. Это заставляет вас писать функцию очистки, когда вы создаете функции "инициализации". Преимущество приходит, когда ваша программа становится более сложной, и вы хотите перезапустить часть программы. Если вы уже написали рабочие функции очистки, маловероятно, что вы внезапно забыли какую-то очистку при «перезапуске» части вашей программы.

Написание функций очистки «лениво», т.е. только когда вам это нужно, более подвержено ошибкам. Написание функций очистки заставляет задуматься об очистке и возможной зависимости очистки. Это упрощает повторное использование кода части вашего кода в другом проекте.

Да, освобождение в atexit бесполезно, как и закрытие файлового дескриптора. Однако написание и поддержка функции очистки по мере роста вашего кода может быть ограничением, которое заставит вас задуматься о том, что вы делаете

6
ответ дан 2 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

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