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

Поиск:

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


Опытный
**


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

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



Цитата(EvilsInterrupt @  18.1.2009,  18:38 Найти цитируемый пост)
Что происходит когда программа запросила память, а стартовое значение исчерпано  ? Правильно, его выделяет диспетчер памяти операционой системы.

как говориться, От таких ответов и мне не понятно что такое "Утечка памяти". Ich verstehe dich nicht smile 
Если взять стек, то его максимум устанавливается загрузчиком при старте программы - это ясно. Но при исчерпании стека, увы, программа завершает работу, а не происходит выделение нового участка памяти(даже если свободной еще навалом)
Цитата(EvilsInterrupt @  18.1.2009,  18:38 Найти цитируемый пост)
Что произойдет если программа вдруг освобождает память ? Правильно,  диспетчер памяти не освобождает его до тех пор пока программа не завершится!

Да ладно! smile 

Код

int main()
{
  int* a = 0;
  do{
    a = new int;
    delete a;
  }while (true);
  return 0;
}

чтото не видно, чтобы память "утекала"....


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
vinter
Дата 18.1.2009, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



Цитата(pan2004 @  18.1.2009,  20:21 Найти цитируемый пост)
Если взять стек, то его максимум устанавливается загрузчиком при старте программы - это ясно

разве, а не при компиляции ли он выставляется?


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


Executables research
***


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

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



vinter, загрузчиком соглассно параметром что выставлены в PE-заголовке, в IMAGE_OPTIONAL_HEADER.SizeOfStackCommit . 


pan2004

Цитата

Да ладно!  


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

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

Это сообщение отредактировал(а) EvilsInterrupt - 18.1.2009, 23:28
PM MAIL WWW ICQ Jabber   Вверх
mes
Дата 19.1.2009, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



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

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


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


Эксперт
****


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

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



в данном случае я бы разделил утечки памяти на два класса:
1. утечки памяти в самой программе. это когда программа переходит в одно и то же состояние, но при этом потребляемая память растет. пример: приложение открывает файл, обрабатывает, закрывает. теперь оно готово к следующей обработке. но если память, выделенная во время обработки (и более не нужная) не освобождена, есть факт утечки. 
после завершения программы (процесса) вся такая память возвращается в систему.
2. утечка памяти ОС. это когда программа запрашивает ресурсы (т.е. не обязательно память напрямую) у ОС, но не освобождает. Не все выделяемые ресурсы ОС может контролировать, поэтому часть памяти может быть не возвращена в систему после завершения процесса.
PM MAIL   Вверх
MAKCim
Дата 19.1.2009, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



в общем мое определение утечки памяти (думаю достаточно формальное)

блок памяти аллокатора (malloc) считается потерянным, если не существует ни одного объекта-указателя, который бы содержал адрес этого блока
соответственно, утечка памяти - это наличие хотя бы одного такого блока

Добавлено @ 09:49
Цитата(baldina @  19.1.2009,  03:52 Найти цитируемый пост)
Не все выделяемые ресурсы ОС может контролировать, поэтому часть памяти может быть не возвращена в систему после завершения процесса. 

например?
 smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
baldina
Дата 19.1.2009, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



признаю, выразился неточно. 
контролировать ресурсы - обязанность ОС. 
когда выделяются системные ресурсы (например объекты GDI), память для них отводится либо в адресном пространстве процесса - в этом случае после завершения процесса память возвращается в систему автоматически, либо в адресном пространстве ядра - в этом случае тоже должно быть автоматически. на деле, увы, не всегда так. 
примеры - начиная с проблем с DeleteObject в Windows 3.x (в ней ресурсы GDI выделялись в общей памяти и был баг с автоматическим освобождением. подробности не помню, давно было) и до проблем с утечками памяти в драйверах. их полно
PM MAIL   Вверх
Dem_max
Дата 19.1.2009, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Вроде до сих пор в XP есть проблемы с освобождением ресурсов GDI, если не освободил и закрыл программу, то для ОС они заняты. Но это на уровне разговоров.


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


Шустрый
*


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

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



Цитата(Dem_max @ 19.1.2009,  13:35)
Вроде до сих пор в XP есть проблемы...Но это на уровне разговоров.

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

вынь 95 и 98 то вообще была критична к этому... всё что выше переносит издевательство..хотя при большом ухищрении и в блоб можно загнать...


удачи усем
(круглый)
PM MAIL   Вверх
ZeroPoint
Дата 21.1.2009, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хех. Рецепт утечки. В обработчике WM_PAINT создавай компат DC выбирай в него BMP картинку, BitBlt в основной DC и _не_удаляй_ после этого созданный DC. 
В обработчике таймера сделай инвалидацию и перерисовку всего окна.
[Не пытайтесь повторить дома smile]

По простому:
1. Утечка - потерянный (или просто забытый, в смысле очистки) указатель на выделенный блок памяти. Влияет на производительность твоей программы. В какой-то момент память просто перестанет выделяться и произойдет исключение. Тут система просто вычистит весь блок памяти, где жил твой процесс, со всем содержимым (и потерянным тоже). То же происходит при нормальном завершении программы, просто не достигнут предел памяти.
2. Утечка системной памяти - Когда теряется глобальная память, уже влияет на работоспособность системы. Но память и в этом случае очищается системным менеджером, вызывая тормоза.  
3. Утечка ресурсов - один из вариантов в начале поста, тяжелый выриант п.2. В этом случае теряется не только память, но и использующие ее обьекты системы, которые тоже ограничены. Например GDI обьектов может быть чуть более 16К (точно не помню), и они расходуются как на нужды системы, так и приложений.

Так, что рекомендуется освобождать ресурсы (очищать память), если они уже не нужны, или пока не нужны.
Вот для практики, если интересно:
http://www.realcoding.net/article/view/109

Это сообщение отредактировал(а) ZeroPoint - 21.1.2009, 12:39
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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