Linux автоматически повторно запрашивает всю память, используемую приложениями немедленно?
Нет, но да в том смысле, что вы намекаете. Вся виртуальная память, принадлежащая процессу, освобождается. Кадры, которые не являются общими, становятся доступными для других процессов.
Если так, то должно ли приложение беспокоиться об освобождении всей памяти перед выходом?
Да, по нескольким причинам:
- В будущем вы можете решить расширить этот код для других целей, поэтому позднее может быть сложно добавить очистку.
- У вас чрезмерное использование памяти, и вам действительно нужно «впустую» использовать пространство виртуальной памяти.
- Вам необходимо отследить некоторые ошибки: неосторожное высвобождение полученных ресурсов очень затруднит отладку.
Могут возникнуть ситуации, когда вам не нужно освобождать память, обычно это связано с производительностью и относится только к этим ситуациям.
Действительно ли стоит вызывать деструктор каждого класса в многопоточном приложении перед вызовом exit (0)?
Это почти то же самое, что и последний вопрос. Также обратите внимание, что не освобождение ресурсов от сторонних производителей и библиотек ОС - это то же самое, что не освобождение памяти.
Если Linux всегда повторно запрашивает всю память, используемую приложением, сразу же, то утечки памяти - это только висячие указатели, созданные приложением, и это также только его время жизни.
Да. Единственный раз, когда эта теория рушится, это когда ресурсы удерживаются глобально и не исчезают при завершении процесса. Общая память, плохо спроектированные сторонние библиотеки, временные файлы и т. Д. Являются примерами этого.