К примеру в проге есть участок кода вроде этого
{
for (int i = 0 ; i < 1000000; i++)
{
char *t = new char;
}
return 0;
}
Что и где останется в памяти после того, как прога завершит работу (в Win98/2k/XP)?
Или все занимаемые прогой ресурсы очистятся (к примеру, в старших виндах)?
... << RSDN@Home 1.1.4 @@subversion >>
Здравствуйте, JWA, Вы писали:
> К примеру в проге есть участок кода вроде этого
> > {
> for (int i = 0 ; i < 1000000; i++)
> {
> char *t = new char;
> }
> return 0;
> }
>
> Что и где останется в памяти после того, как прога завершит работу (в Win98/2k/XP)?
> Или все занимаемые прогой ресурсы очистятся (к примеру, в старших виндах)?
Насколько я знаю, современные операционные системы, при завершении программы освобождают все занятые последней ресурсы — память, дескрипторы файлов и т.п.
Но не стоит забывать, что в ОС могут работать другие программы, которым тоже нужны ресурсы, которые в общем-то ограничены (память все еще ресурс!

)
И вообще, лучше взять за правило всегда отдавать то, что взял взаймы у ОС
--
foobar2000 v0.8.3: 02. Various — Nine Inch Nails / Deep [Tomb Raider Soundtrack] (пауза)
PM wrote:
[]
> Насколько я знаю, современные операционные системы, при завершении программы освобождают все занятые последней ресурсы — память, дескрипторы файлов и т.п.
Все операционные системы conforming to SVr4, SVID, в частности большинство Линуксов, не освобождают shared memory сегменты при завершении, их надо освобождать явно. Это двоякая возможность — с одной стороны, неаккуратно написанная прога после нескольких запусков (теоритически) может исчерпать память. С другой стороны, эта возможность иногда используется серверами — они хранят critical data (состояние, сессии и т.д.) в shared memory segment и если сервер рухнул и перезагрузился он просто подцепляет этот shared memory segment и переходит в состояние в котором он был до падения. Естественно, что инвариант данных в сегменте все-таки не должен быть нарушен в момент падания.
--
Maxim YegorushkinPosted via RSDN NNTP Server 1.9