Windows 7 устраняет утечки памяти в C ++? - PullRequest
9 голосов
/ 03 апреля 2012

Ради интереса я создал проект, который создал около 5 ГБ памяти и не удалял его.Пока приложение работает, эта «утечка памяти» существует.Когда я закрываю свое приложение, память в течение 2 секунд возвращается в нормальное состояние, как будто моя программа никогда не запускалась.Поэтому необходимо задать вопросы.

Очищает ли Windows 7 утечки памяти от плохих программ после их завершения?

Все ли версии Windows делают это?

Будет ли Linuxи среды Mac OS X делают это?

Ответы [ 5 ]

16 голосов
/ 03 апреля 2012

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

9 голосов
/ 03 апреля 2012

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

Это обычно относится ко всем операционным системам, а не только к Windows 7 или Windows.

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

1 голос
/ 03 апреля 2012

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

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

BSD Unix обычно начинает восстанавливать память, когда процент свободной памяти падает ниже 5%, и продолжает восстанавливаться, пока процент свободной памяти не достигнет 7%

1 голос
/ 03 апреля 2012
  1. Да (Windows 7 восстанавливает всю память, выделенную программе при выходе из программы, независимо от того, как она выходит из-под контроля или при сбое).
  2. Да (для любой версии Windows, которая достаточно свежая, чтобы все еще работать).
  3. Да (Unix, Linux, Mac OS X, BSD все освобождают всю память, выделенную программе при выходе из программы, независимо от того, как она выходит).

Несколько старых операционных систем не возвращали ресурсы при выходе из программы. Я считаю, что AmigaOS был одним из них; другой, я полагаю, была старая Mac OS (Mac OS 9 и более ранние версии). Однако практически все настоящие многозадачные системы должны восстанавливать память (и ресурсы в целом) при выходе из процесса, для которого она была выделена.

0 голосов
/ 03 апреля 2012

Это не относится ко всем ОС, например, я не верю, что WinXP будет вести себя так.

Хотя для большинства современных ОС это сейчас так. Я полагаю, что все текущие версии Linux, Windows и MacOS делают это.

Я уверен, что для Windows он был представлен в Windows Vista. В то время это было довольно захватывающее улучшение, так как там было МНОЖЕСТВО хитрых приложений для Windows, которые плохо управляли своей памятью. В то время это была большая победа для Windows, но она пришла поздно для вечеринки (как обычно), так как Linux и MacOS уже делали это задолго до этого.

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

...