Все вопросы связанные с программированием. Языки программирования. Средства разработки.
Аватара пользователя
Hank
Не в сети
Почётный форумщик
Почётный форумщик
Сообщения: 4299
Зарегистрирован: Чт май 05, 2005 19:35
Откуда: RnD

Сообщение Hank »

tAZAR,
а при чем тут Garbage Collector? при завершении приложения, система сама освобождает все занятые им ресурсы и память.

Код: Выделить всё

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

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

По завершении процесса (не важно каким способом) система гарантирует: после него ничего не останется — даже намеков на то, что он когда-то выполнялся. Завер шенный процесс не оставляет за собой никаких следов. Надеюсь, я сказал ясно. 
(c) Дж. Рихтер - Создание эффективных Win32 приложений.
Люблю повеселиться, особенно пожрать,
Люблю и поработать, особенно поспать )

Аватара пользователя
Hank
Не в сети
Почётный форумщик
Почётный форумщик
Сообщения: 4299
Зарегистрирован: Чт май 05, 2005 19:35
Откуда: RnD

Сообщение Hank »

tAZAR,
Eraser, уж извини - но это тебе не Delphi и не VB
в Делфи никаких Garbage Collector'ов с роду не было и вряд ли будут.
Люблю повеселиться, особенно пожрать,
Люблю и поработать, особенно поспать )

Аватара пользователя
tAZAR
Не в сети
Модератор
Модератор
Сообщения: 567
Зарегистрирован: Ср июн 23, 2004 8:13
Откуда: г.Шахты

Сообщение tAZAR »

Eraser,
тут тема была насчет РУЧНОГО ВЫДЕЛЕНИЯ ПАМЯТИ.
Если делаешь new/GlobalAlloc() и т.д. - делай delete/GlobalFree()!
Если делаешь new SuperVar[...] - делай delete[] SuperVar;

В общем - читай матчасть внимательней :-)
Если все еще мне не веришь - читай пост JokerR'а.
О TerminateProcess, кажется, речь тут не шла. Человек выделял память с помощью new, процессов не запускал.
А если ты об этом: "Система вызовет TerminateProcess().. и все очистится" - сильно ошибаешься. На кой тогда хр.. в с++ есть работа с памятью? Давайте тогда вообще не будем удалять выделенную память! Давайте, производители игр не будут вычищать за собою память в своих детищах. Посмотрим - что произойдет.
Еще -1, Eraser.
И вообще :-) Юзайте умные указатели, товарищи друзья!

Аватара пользователя
Hank
Не в сети
Почётный форумщик
Почётный форумщик
Сообщения: 4299
Зарегистрирован: Чт май 05, 2005 19:35
Откуда: RnD

Сообщение Hank »

tAZAR,
я так понял речь шла о том, нужно ли освобождать память, если приложение закрывается.. в общем случае конечно нужно, но можно и не освобождать.. по-опыту- система это делает быстрее.
Давайте, производители игр не будут вычищать за собою память в своих детищах.
почти во всех современный играх, если выйти в меню настроек, там есть такая опция, как выйти в Виндовз, так вот последние лет 5 эту операцию стали делать именно прямым вызовом TerminateProcess, чтобы система сама прибила процесс и освободила память, т.к. это гораздо быстрее, чем по отдельности освобождть все внутренние объекты/структуры процесса.
Если делаешь new/GlobalAlloc() и т.д. - делай delete/GlobalFree()!
Если делаешь new SuperVar[...] - делай delete[] SuperVar;
вот прямо глаза открыл!!! )) 7 лет пишу программы и не знал этого! :D
в своем последнем проекте так пришлось помучиться с менеджерами памяти и диспетчером кучи, что хоть бери да диссертацию на эту тему пиши ))
tAZAR писал(а):Еще -1
не надоело арифметикой заниматься? )
тут тема была насчет РУЧНОГО ВЫДЕЛЕНИЯ ПАМЯТИ
про то, что система сама освободит память я написал касаемо высказываения
tAZAR писал(а):Утечка будет, если в этом окне прога вылетит ;-)
повторюсь еще. утечки не будет. в системном плане, т.е. после "вылета проги" ОЗУ занято не будет "мертвым грузом".
Люблю повеселиться, особенно пожрать,
Люблю и поработать, особенно поспать )

Аватара пользователя
tAZAR
Не в сети
Модератор
Модератор
Сообщения: 567
Зарегистрирован: Ср июн 23, 2004 8:13
Откуда: г.Шахты

Сообщение tAZAR »

Eraser,
Я не пытался никого обидеть :-)
Спор по поводу выделения - освобождения памяти зашел в тупик, разруливать и доказывать что-либо еще по этой теме мне некогда. Если кому надо - посмотрит в библы, и сделает для себя вывод, что там и как работает.
Я свое сказал, JokerR свое сказал. Если два мнения против одного недостаточно - уж извини :-)

У меня даже при завершении приложения, если я забуду чего-нить удалить, отладчик пишет:
Memory Leak at blablabla: bla bla bla 00 bla.....
TerminateProcess() - я считаю, не выход. Это, все - таки насильственно. Все нужно делать по человечески и инструменты применять соответствующие. Если есть WM_CLOSE, есть WM_DESTROY... А то получается, что выполняющейся проге голову непонятно за что лопатой отрубают....

А с арифметикой я закончил :-) Теперь буду повторять курс тервера...

Аватара пользователя
Hank
Не в сети
Почётный форумщик
Почётный форумщик
Сообщения: 4299
Зарегистрирован: Чт май 05, 2005 19:35
Откуда: RnD

Сообщение Hank »

tAZAR,
tAZAR писал(а):Memory Leak at blablabla: bla bla bla 00 bla.....
в BDS2006 если включена проверка на утечки - отладчик тоже ругается.
TerminateProcess() - я считаю, не выход.
когда как.. в большенстве проектов конечно лучше завершать корректно, но, к примеру в игрушках - вполне выход, ведь не зря так и делают.
Люблю повеселиться, особенно пожрать,
Люблю и поработать, особенно поспать )

Аватара пользователя
Hank
Не в сети
Почётный форумщик
Почётный форумщик
Сообщения: 4299
Зарегистрирован: Чт май 05, 2005 19:35
Откуда: RnD

Сообщение Hank »

кстати насчет замечания JokerR о массивах. В Делфи есть т.н динамические массивы, память под них распределяется подобно тому как для string - через спец. ф-ии менеджера памяти Делфи. Так же автоматически определяется время жизни переменных этого типа, т.е. когда переменная выходит из области видмости - она автоматически освобождается менеджером памяти.
Люблю повеселиться, особенно пожрать,
Люблю и поработать, особенно поспать )

Аватара пользователя
tAZAR
Не в сети
Модератор
Модератор
Сообщения: 567
Зарегистрирован: Ср июн 23, 2004 8:13
Откуда: г.Шахты

Сообщение tAZAR »

Eraser писал(а):т.н динамические массивы
Да везде они есть. Я и посоветовал юзать или смарт поинтеры, или дин.массивы. можно, например контейнеры из STL :-)

Ответить