ОС; ресурсы автоматически моются

Спорный а? Я считаю, что потоки C ++ используют < < и >> Я ненавижу это. Они операторы сдвига. Перегрузить их таким способом - плохая практика. Это заставляет меня хотеть убить любого, кто придумал это и подумал, что это хорошая идея. GRRR.

7
задан Community 23 May 2017 в 12:01
поделиться

4 ответа

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

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

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

3
ответ дан 6 December 2019 в 15:25
поделиться

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

  • Файлы, созданные без FILE_FLAG_DELETE_ON_CLOSE
  • Записи журнала событий
  • Бумага, которая использовалась для заданий на печать
  • 3
    ответ дан 6 December 2019 в 15:25
    поделиться

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

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

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

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

    3
    ответ дан 6 December 2019 в 15:25
    поделиться
    Другие вопросы по тегам:

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