Вы правы, большинство современных операционных систем освобождают память, файловые дескрипторы и т. Д. При выходе из приложения.Поэтому я полностью согласен с вами и не буду беспокоиться о выделении каких-либо ресурсов , если ресурсы, доступные для приложений, не ограничены .
Дело в том, что ресурсы не безграничны, на самом деле все наоборотвы принимаете то, что не может иметь другое приложение, работающее в системе.Во многих случаях вам понадобится ресурс не на протяжении всего жизненного цикла вашего приложения, а только для какой-то его части, поэтому вы хотите хорошо играть с остальной частью системы и брать только то, что вам нужно, в то время, когда вам это нужно.
Практика отказа от высвобождения ресурсов очень распространена во встроенных устройствах, поскольку для них единственное запущенное приложение, и оно даже не может выйти, единственный выход - выключить устройство.Я работаю с одной из таких систем, и хотя у встроенного устройства нет проблем с тем, чтобы не выпускать что-то, мы, инженеры, страдаем от этого по нескольким причинам:
- при тестировании встроенного приложения на обычном ПК мы вынужденымоделировать моделируемое устройство как процесс, который начинается и заканчивается.Если бы ресурсы были высвобождены должным образом, мы могли бы запустить один процесс несколькими тестами одновременно, включая тесты, запускающие и останавливающие моделируемое устройство.
- В какой-то момент нам пришлось работать над проектом, который требовал от нас выполнениячасть встроенного кода и опубликовать его в виде библиотеки динамических ссылок для Windows / Linux, которая выполняет подмножество функций реального устройства, но без реального устройства.Из-за проблемы с ресурсами пользователи не могут загружать и выгружать эту DLL несколько раз в свои приложения, потому что каждый раз, когда они это делают, приличный кусок памяти отбирается и никогда не возвращается.Мы задокументировали это как ограничение, мы просим наших пользователей связывать библиотеку с приложением, а не загружать ее динамически.К сожалению, через 10 с лишним лет, когда это встроенное устройство находилось в разработке, было бы очень сложно найти и исправить все эти распределения ресурсов, поэтому мы продолжаем откладывать его и вместо этого имеем неоптимальный продукт.
- , когда мыиспользуя инструменты статического и динамического анализа кода, чтобы обнаружить реальные дефекты, мы получаем массу ложных срабатываний, поэтому нам пришлось разработать инструменты, которые отфильтровывают их, чтобы не рисковать, пропуская реальные ошибки во всем шуме.
Мой совет заключается в том, что вы пишете код так, как будто операционная система вам не поможет, так как именно это даст вам больше возможностей для улучшения программного обеспечения в будущем.