![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
pan2004 |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 357 Регистрация: 28.7.2007 Репутация: 1 Всего: 9 |
как говориться, От таких ответов и мне не понятно что такое "Утечка памяти". Ich verstehe dich nicht ![]() Если взять стек, то его максимум устанавливается загрузчиком при старте программы - это ясно. Но при исчерпании стека, увы, программа завершает работу, а не происходит выделение нового участка памяти(даже если свободной еще навалом)
Да ладно! ![]()
чтото не видно, чтобы память "утекала".... |
||||||
|
|||||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
||||
|
||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
vinter, загрузчиком соглассно параметром что выставлены в PE-заголовке, в IMAGE_OPTIONAL_HEADER.SizeOfStackCommit .
pan2004,
ты не слышал о выражении "знания" нужно выдавать по крупицам ? Я же дал заметку и оговорку, что я не абсолютно прав и что искать правду надо у дяденек с имнеми Руссинович и Рихтер. Я лишь написал что из себя представляет "примерно" процесс утякания памяти. Когда чел получит это представление, он сможет дальше идти, уточняя для себя нюансы. А если сразу же выволить ему у него каша в голове будет, которую потом разгребай и разгребай. Это сообщение отредактировал(а) EvilsInterrupt - 18.1.2009, 23:28 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Может я и ошибаюсь, но в том вышеизложеном объяснении, имхо, Вы больше запутали (или запутались), чем дали крупицу знания для разгребания. ![]() |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
в данном случае я бы разделил утечки памяти на два класса:
1. утечки памяти в самой программе. это когда программа переходит в одно и то же состояние, но при этом потребляемая память растет. пример: приложение открывает файл, обрабатывает, закрывает. теперь оно готово к следующей обработке. но если память, выделенная во время обработки (и более не нужная) не освобождена, есть факт утечки. после завершения программы (процесса) вся такая память возвращается в систему. 2. утечка памяти ОС. это когда программа запрашивает ресурсы (т.е. не обязательно память напрямую) у ОС, но не освобождает. Не все выделяемые ресурсы ОС может контролировать, поэтому часть памяти может быть не возвращена в систему после завершения процесса. |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
в общем мое определение утечки памяти (думаю достаточно формальное)
блок памяти аллокатора (malloc) считается потерянным, если не существует ни одного объекта-указателя, который бы содержал адрес этого блока соответственно, утечка памяти - это наличие хотя бы одного такого блока Добавлено @ 09:49
например? ![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
признаю, выразился неточно.
контролировать ресурсы - обязанность ОС. когда выделяются системные ресурсы (например объекты GDI), память для них отводится либо в адресном пространстве процесса - в этом случае после завершения процесса память возвращается в систему автоматически, либо в адресном пространстве ядра - в этом случае тоже должно быть автоматически. на деле, увы, не всегда так. примеры - начиная с проблем с DeleteObject в Windows 3.x (в ней ресурсы GDI выделялись в общей памяти и был баг с автоматическим освобождением. подробности не помню, давно было) и до проблем с утечками памяти в драйверах. их полно |
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
Вроде до сих пор в XP есть проблемы с освобождением ресурсов GDI, если не освободил и закрыл программу, то для ОС они заняты. Но это на уровне разговоров.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
kolobok0 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 24.12.2008 Репутация: нет Всего: 2 |
ну почему же... если вы будете кушать и кушать память, то система честно вам скажет - я вот тут распределю сейчас, но освободить не смогу...и после отгрузки - увы висит сие хозяйство... ![]() вынь 95 и 98 то вообще была критична к этому... всё что выше переносит издевательство..хотя при большом ухищрении и в блоб можно загнать... удачи усем (круглый) |
|||
|
||||
ZeroPoint |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.1.2009 Репутация: нет Всего: нет |
Хех. Рецепт утечки. В обработчике WM_PAINT создавай компат DC выбирай в него BMP картинку, BitBlt в основной DC и _не_удаляй_ после этого созданный DC.
В обработчике таймера сделай инвалидацию и перерисовку всего окна. [Не пытайтесь повторить дома ![]() По простому: 1. Утечка - потерянный (или просто забытый, в смысле очистки) указатель на выделенный блок памяти. Влияет на производительность твоей программы. В какой-то момент память просто перестанет выделяться и произойдет исключение. Тут система просто вычистит весь блок памяти, где жил твой процесс, со всем содержимым (и потерянным тоже). То же происходит при нормальном завершении программы, просто не достигнут предел памяти. 2. Утечка системной памяти - Когда теряется глобальная память, уже влияет на работоспособность системы. Но память и в этом случае очищается системным менеджером, вызывая тормоза. 3. Утечка ресурсов - один из вариантов в начале поста, тяжелый выриант п.2. В этом случае теряется не только память, но и использующие ее обьекты системы, которые тоже ограничены. Например GDI обьектов может быть чуть более 16К (точно не помню), и они расходуются как на нужды системы, так и приложений. Так, что рекомендуется освобождать ресурсы (очищать память), если они уже не нужны, или пока не нужны. Вот для практики, если интересно: http://www.realcoding.net/article/view/109 Это сообщение отредактировал(а) ZeroPoint - 21.1.2009, 12:39 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |