ОПЕРАЦИОННЫЕ СИСТЕМЫ; ресурсы автоматически очищаются - PullRequest
7 голосов
/ 29 июня 2009

Из этого ответа: Когда обработчик завершения C ++ является правильным (TM)?

Было бы неплохо иметь список ресурсов, которые «есть» и «не» автоматически очищаются ОС при выходе из приложения. В вашем ответе было бы неплохо, если бы вы могли указать ОС / ресурс и, предпочтительно, ссылку на какой-либо документ (при необходимости).

Очевидный:

Память: Да, автоматически очищается. Вопрос. Есть ли исключения?

Ответы [ 4 ]

5 голосов
/ 15 апреля 2010

Существуют некоторые неясные ресурсы, которые Windows не очищает при сбое или выходе приложения без явного их освобождения, в основном потому, что ОС не знает, важно ли их оставить или нет.

  1. Временные файлы - как уже упоминали другие.
  2. Глобально зарегистрированный WNDCLASS es («Ни один класс окна, зарегистрированный в DLL, не регистрируется при выгрузке DLL. DLL должен явно отменить регистрацию своих классов при выгрузке.» MSDN ) Если ваш глобальный У класса окна также есть класс DC, тогда этот DC также будет вытекать.
  3. Глобальный ATOM с (относительно ограниченный ресурс).
  4. Идентификаторы сообщений окна, созданные с помощью RegisterWindowMessage. Они предназначены для утечки, так как нет UnregisterWindowMessage.
  5. Семафоры и события технически не просочились, но когда приложение-владелец пропадает без сигнализации, другие процессы могут зависать. Это не верно для Mutex. Если приложение-владелец пропадает, другие процессы, ожидающие этого Mutex, освобождаются.
  6. В Windows XP и более ранних версиях могут возникать остаточные странности, если вы не отменили регистрацию горячей клавиши перед выходом. Другие приложения могут быть не в состоянии зарегистрировать ту же горячую клавишу.
  7. В Windows XP и более ранних версиях весьма часто включается окно консоли зомби после сбоя процесса. (В частности, приложение с графическим интерфейсом, которое также создает окно консоли.) Оно отображается на панели задач. Все, что вы можете сделать, это свернуть, восстановить или переместить окно.
  8. Неисправные драйверы могут усугубляться приложениями, которые явно не освобождают ресурсы при выходе. Утечки в невыгружаемом пуле довольно распространены.
  9. Данные скопированы в буфер обмена. Я полагаю, что это не считается, потому что на тот момент он принадлежит ОС, а не приложению, которое его там поместило.
  10. Глобально установленные хуки не выгружаются при сбое процесса установки перед удалением хука.
3 голосов
/ 30 июня 2009

В Windows практически все, с чем вы можете обращаться, должно управляться операционной системой, поэтому вы получаете только дескриптор. Это включает, но не ограничивается следующее (список скопирован из документации MSDN для API CloseHandle ()):

Communications device 
Console input 
Console screen buffer 
Event 
File 
File mapping 
Job 
Mailslot 
Mutex 
Named pipe 
Process 
Semaphore 
Socket 
Thread 
Token 

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

Другие операционные системы работают таким же образом. Трудно представить себе ОС, достойную своего названия (я исключаю встраиваемые системы и т. Д.), Где это не так - управление ресурсами является смыслом №1 для операционной системы.

3 голосов
/ 30 июня 2009

Временные файлы - хороший пример того, что не будет очищено - дескриптор освобожден, но файл не удален

3 голосов
/ 29 июня 2009

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

Если вы ищете программные артефакты, которые могут сохраняться после завершения процесса, в Windows у вас есть как минимум:

  • Ключи реестра, которые создаются без REG_OPTION_VOLATILE
  • Файлы, созданные без FILE_FLAG_DELETE_ON_CLOSE
  • Записи в журнале событий
  • Бумага, использованная для заданий на печать
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...