linux — что происходит, когда библиотеки не «очищены» в с ++ при выходе

Я работаю под Linux и просто удивляюсь, что на самом деле происходит после смерти процесса, с кодом библиотек, которые не «очищаются» путем запуска над ними функции завершения или чего-то в этом роде. Я видел, как люди применяли определенную очистку к функциям выхода, а другие не делали этого.

3

Решение

Это зависит от того, какую очистку вы ожидаете. Все локальные ресурсы ОС (память, открытые файлы / сокеты и т. Д.), Которые открыла библиотека, будут закрыты / освобождены. Это происходит, даже если вы не вызываете связанные функции очистки (free / delete, fclose / close и т. Д.).

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

Кроме того, библиотеки могут «скрывать» определенные функции очистки, если программа завершается нормально.

4

Другие решения

Это зависит…

… на тип ресурса.

Лучшая практика

Сделать бесплатно файловые дескрипторы. (Однако ОС будут закрой их для тебя.)

Сделать близко буферизованные файлы и соединения дб. (Однако стандартные выходные буферы будут сброшены на выход (3) или по возвращении из главный().

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

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector