- утечка памяти, Alexander S. Salieff, 17:29 , 19-Май-04 (1)
> Есть такой тип в C++ string . Приведу пример : > >int main(void) >{ >string s; >s = "any text"; >return 0; >} >Вот там где s = "any text" выделяется память под переменную s >. Память берется из кучи (heap). Так вот он память не >возвращает, пока не не произойдет завершение процесса и высвобождает память уже >сама операционная система. Подскажите способ как эту память все таки удалить >до завершения процесса? Че за бред? ;) Или область видимости отконфигури, чтобы при выходе из нее автоматическая переменная удалялась, или заюзай динамическое создание через указатель, и сам создавай удаляй - скока влезет...
- утечка памяти, Alexander S. Salieff, 17:31 , 19-Май-04 (2)
Не, ну блин... Утечка... Е-мае ;))))) А вот ты говоришь main(){int a=10;}, и там аж 4 байта резервируюцца. И удаляюцца ведь, гады, только по завершении процесса ;)))) Тоже утечка? ;) Кругом одни утечки тогда, хз, куда от них дется ;)))))
- утечка памяти, AnToXa, 17:34 , 19-Май-04 (3)
> Есть такой тип в C++ string . Приведу пример : > >int main(void) >{ >string s; >s = "any text"; >return 0; >} >Вот там где s = "any text" выделяется память под переменную s >. Память берется из кучи (heap). Так вот он память не >возвращает, пока не не произойдет завершение процесса и высвобождает память уже >сама операционная система. Подскажите способ как эту память все таки удалить >до завершения процесса? вы бредите. автоматическая переменная типа std::string уничтожается при раскрутке стека перед выходом из main и вызывается деструктор std::string который освобождает память. сделайте простейший враппер над std::string и увидите.
- утечка памяти, Alexander S. Salieff, 17:50 , 19-Май-04 (4)
>вы бредите. >автоматическая переменная типа std::string уничтожается при раскрутке стека перед выходом из main >и вызывается деструктор std::string который освобождает память. >сделайте простейший враппер над std::string и увидите. Я не думаю, что человеку ведомы раскрутки стека, вероятно он это и имел ввиду под словом "высвобождает сама операционная система" (интересно, каким именно образом он отслеживал точку высвобождения? ;). Автора возмущает сам факт, почему компилятор не догадался, что автору больше не нужна автоматическая переменная, и не удалил ее до выхода из области видимости? ;))) А ведь мог бы, если бы захотел и постарался ;))) Блин, я ща помру ;) Почему люди не считают нужным хотя бы ознакомится с ртфмом под названием "Язык С++" авторства малоизвестного человека по имени Бьярн Страуструп?
- утечка памяти, AnToXa, 18:02 , 19-Май-04 (5)
>Я не думаю, что человеку ведомы раскрутки стека, вероятно он это и >имел ввиду под словом "высвобождает сама операционная система" (интересно, каким именно >образом он отслеживал точку высвобождения? ;). Автора возмущает сам факт, почему >компилятор не догадался, что автору больше не нужна автоматическая переменная, и >не удалил ее до выхода из области видимости? ;))) А ведь >мог бы, если бы захотел и постарался ;))) >Блин, я ща помру ;) хех, ну раскрутку стека производит libstdc++ все-таки, а не система :) >Почему люди не считают нужным хотя бы ознакомится с ртфмом под названием >"Язык С++" авторства малоизвестного человека по имени Бьярн Страуструп? такие вот они, люди :) почему вы думаете большинство "программистов на C++" используют язык как C с классами, имхо отсюда большинство нападок на C++. ладно, старческое ворчание :)
- утечка памяти, fura13, 08:29 , 20-Май-04 (6)
Извиняюсь что не правильно поставил вопрос. Да к сожалению я не очень пока хорошо знаю С++. Я хотел узнать нет ли в типе string явнового способа для высвобождения памяти. Про область видимости я знаю, не могу понять почему память не высвобождается. String у меня находится в структуре которую я размещаю в динамической памяти. Стринг у меня в структуре статик, ну т.е. : struct st{ int name; string s; }; Программа у меня в идеале должна работать довольно долго(бесконечно). Но работает всего четыре дня(запускаю с помощью nohup). По команде top явно видно что растет size и res.
- утечка памяти, SergeiZz, 09:38 , 20-Май-04 (7)
> Извиняюсь что не правильно поставил вопрос. Вопрос поставлен правильно, но вопрос детский...>Да к сожалению я не очень пока хорошо знаю С++. ...И форум -- не лучшее место для его изучения... >Я хотел узнать нет ли >в типе string явнового способа для высвобождения памяти. Есть, ессестввенно. >String у >меня находится в структуре которую я размещаю в динамической памяти. >Стринг у меня в структуре статик, Это неверное заключение. Статик -- это совсем другое. >ну т.е. : >struct st{ > int name; > string s; >}; > Программа у меня в идеале должна работать довольно долго(бесконечно). Но работает >всего четыре дня(запускаю с помощью nohup). По команде top явно видно >что растет size и res. Как только возникнет необходимость освободить память, выделенную под s (а когда это будет знаете только Вы сами), вызовите явно деструктор string: string str= "Hello!"; // ... str.~string(); Читать по C++ рекомендую недавно изданную книгу Лафоре: http://www.books.ru/shop?search_type=+&query=КЮТНПЕ&x=0&y=0
- утечка памяти, AnToXa, 15:54 , 20-Май-04 (8)
>>String у >>меня находится в структуре которую я размещаю в динамической памяти. >Стринг у меня в структуре статик, >Это неверное заключение. Статик -- это совсем другое. угу, это не static, это просто "by value". >>всего четыре дня(запускаю с помощью nohup). По команде top явно видно >>что растет size и res. скорее всего память растет не из-за string :) может быть из-за того, что вы просто не делаете delete на эту самую свою структуру
>Как только возникнет необходимость освободить память, выделенную под s >(а когда это будет знаете только Вы сами), вызовите явно деструктор string: > > >string str= "Hello!"; >// ... >str.~string(); для очистки string лучше использовать str.clear(), ибо явно вызывая деструктор можно поиметь некоторые проблемы, ибо насколько я помню стандарт не оговаривает, что деструктор должен оставлять объект в consistent state, и даже если в конкретной реализации это так, то все равно можно нарваться на двойной вызов деструктора.
|