Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему освобождается память, хотя delete я не пишу 
:(
    Опции темы
MaxWave
Дата 15.1.2009, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 8.3.2006

Репутация: нет
Всего: нет



Код

int main(int argc, char* argv[])
{
    for (int i=0;i<100000000;i++)
        int *а = new int[10];

    return 0;
}


Но по выходе из программы все становится во круги своя. Почему занятая мной память система очищает? Где же утечки памяти?
PM MAIL   Вверх
vinter
Дата 15.1.2009, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



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


--------------------
Мой блог
PM MAIL WWW   Вверх
MaxWave
Дата 15.1.2009, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 8.3.2006

Репутация: нет
Всего: нет



Тогда в чем смысл утечек памяти???
PM MAIL   Вверх
vinter
Дата 15.1.2009, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



в том, что программы работают долго, и не выполняются один раз в main $)


--------------------
Мой блог
PM MAIL WWW   Вверх
MaxWave
Дата 15.1.2009, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 8.3.2006

Репутация: нет
Всего: нет



т.е. система гарантирует что АБСОЛЮТНО ВСЯ память, которую использовало приложение, будет освобождена при выходе из программы?
PM MAIL   Вверх
vinter
Дата 15.1.2009, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



да


--------------------
Мой блог
PM MAIL WWW   Вверх
Dem_max
Дата 16.1.2009, 06:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



Цитата

Тогда в чем смысл утечек памяти???

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


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
MaxWave
Дата 16.1.2009, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 8.3.2006

Репутация: нет
Всего: нет



Ясно, всем спасибо. Я просто думал что утечки это именно утрата памяти из за неправильной работы риложния, даже после завершения.
PM MAIL   Вверх
Lycifer
Дата 18.1.2009, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



В современных ос вся память чистится после завершение программы. Вы привели пример когда память создается один раз и живет все продолжительность программы.  Есть статья (к сожалению автора не помню) в которой он обсуждает вопрос что считается утечкой памяти , а что нет, к примеру patern singleton , создается  объект один раз и используется все время работы программы, та что можно не делать освобождение памяти, но это считается плохим стилем программирование.
PM MAIL ICQ   Вверх
mes
Дата 18.1.2009, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Lycifer @  18.1.2009,  12:55 Найти цитируемый пост)
к примеру patern singleton , создается  объект один раз и используется все время работы программы, та что можно не делать освобождение памяти, но это считается плохим стилем программирование. 

синглетон плох не из за того, что живет все время. 


--------------------
PM MAIL WWW   Вверх
vinter
Дата 18.1.2009, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(mes @  18.1.2009,  14:59 Найти цитируемый пост)
синглетон плох не из за того, что живет все время. 

синглтон плох?


--------------------
Мой блог
PM MAIL WWW   Вверх
Lycifer
Дата 18.1.2009, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



mes,vinter - я же не писал что singleton плох, я писал что не освобождение памяти плохой стиль программирования.

P.S. Синголтон можно и освобождать, я приводил это в пример.
PM MAIL ICQ   Вверх
EvilsInterrupt
Дата 18.1.2009, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



От таких ответов и мне не понятно что такое "Утечка памяти". Попробую пояснить, что такое утечка памяти для системного программиста.

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

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

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

Мои слова выше предназначены только для пояснение того, что примерно  происходит при выполнении программы. Правильное и точное понимание процессов описаны не мною тут, а такими людьми как Марк Руссинович или Джефри Рихтер.


PM MAIL WWW ICQ Jabber   Вверх
mes
Дата 18.1.2009, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(EvilsInterrupt @  18.1.2009,  17:38 Найти цитируемый пост)
Это не  сложно проверить, запустить какую нить программу с большим циклом, увидеть что компьютер стал реагировать менее гибко и потом убить через диспетчер задач, после этого увидим что система начала откликаться. 

 smile А при чем тут (также как и во всей остальной части поста) утечка памяти ? 

Цитата(EvilsInterrupt @  18.1.2009,  17:38 Найти цитируемый пост)
От таких ответов и мне не понятно что такое "Утечка памяти". 

 smile 


--------------------
PM MAIL WWW   Вверх
EvilsInterrupt
Дата 18.1.2009, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



mes
ты прав не до писал мысль. под выделенной тобою текстом следует читать:
цикл где выделяется память,но  не освобождается память, простенький пример:


Код

#define MAX_INT_ARRAY 0x10000
int * pmem;

while(lContinue)
{
  pmem = new int[MAX_INT_ARRAY];
}

PM MAIL WWW ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0891 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.