Что произойдет, если я не вызвал оператор удаления после выделения данных с использованием новой и завершающей программы? - PullRequest
5 голосов
/ 22 апреля 2011

Что произойдет, если я не вызову оператора удаления после распределения данных с использованием new. Я знаю, что данные, которые были распределены, не будут доступны до их публикации, но после завершения программы?

Почему у компьютера появляется тошнота xD, я имею в виду, что он очень медленный, но через некоторое время его производительность улучшается, но не так, как до выполнения программы?

Примечание. Я работаю под управлением Windows XP.

Ответы [ 6 ]

5 голосов
/ 22 апреля 2011

Когда программа завершает всю запрошенную память (стек, куча и т. Д.), Заявленная операционной системой.

2 голосов
/ 23 апреля 2011

Я думаю, что вы видите эффект вытеснения полезных программ из основной памяти на диск.

Ваша намеренно просачивающаяся программа пытается выделить всю память в системе.Чтобы удовлетворить требования вашей программы, Windows находит другие программы в системе, записывает их память в файл подкачки и перераспределяет их память для вашей программы.Когда вы видите, что использование файла подкачки достигает максимума, это происходит потому, что большинство других программ помещаются туда вместо основной памяти.

Когда ваша программа завершает работу, Windows освобождает всю память программы (как отмечали другие).Но все другие программы на вашем компьютере сохраняют свою память в файле подкачки на диске, а не в основной памяти.Поэтому, когда они запускаются, Windows вынуждена загружать свои страницы памяти с диска, что делает программу медленной.Через некоторое время программы вернутся в основную память, и производительность будет выглядеть нормально.

2 голосов
/ 22 апреля 2011

Предположим, вы написали свою собственную версию команды 'ls', а управление памятью было настолько плохим, что каждый раз при запуске выполнялось 10 МБ, что является большой утечкой.Имеет ли это значение?На самом деле, нет.Система восстановит всю память при выходе из программы, что, скорее всего, составляет долю секунды после ее запуска.Конечно, ваша гордость затронута, и мастерство будет низким, но система не пострадает.Вероятно, пользователь никогда не узнает, насколько плохо управляется память.

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

Итак, подведем итог: ОС делает правильные вещи и восстанавливает память.Утечка программного обеспечения это плохо.Но есть случаи, когда это не имеет большого значения.

1 голос
/ 22 апреля 2011

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

1 голос
/ 22 апреля 2011

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

0 голосов
/ 22 апреля 2011

Сама память не является проблемой, она будет повторно востребована автоматически.

Это другие ресурсы, которые удерживаются, потому что деструкторы объектов не вызываются аккуратно (потому что вы не удалили память деструктором (s) не называются).закройте эти ресурсы.

Простыми примерами являются:

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