Есть такой тип в C++ string . Приведу пример :
int main(void)
{
string s;
s = "any text";
return 0;
}
Вот там где s = "any text" выделяется память под переменную s . Память берется из кучи (heap). Так вот он память не возвращает, пока не не произойдет завершение процесса и высвобождает память уже сама операционная система. Подскажите способ как эту память все таки удалить до завершения процесса?
> Есть такой тип в C++ string . Приведу пример :
>
>int main(void)
>{
>string s;
>s = "any text";
>return 0;
>}
>Вот там где s = "any text" выделяется память под переменную s
>. Память берется из кучи (heap). Так вот он память не
>возвращает, пока не не произойдет завершение процесса и высвобождает память уже
>сама операционная система. Подскажите способ как эту память все таки удалить
>до завершения процесса?Че за бред? ;)
Или область видимости отконфигури, чтобы при выходе из нее автоматическая переменная удалялась, или заюзай динамическое создание через указатель, и сам создавай удаляй - скока влезет...
Не, ну блин... Утечка... Е-мае ;)))))
А вот ты говоришь main(){int a=10;}, и там аж 4 байта резервируюцца. И удаляюцца ведь, гады, только по завершении процесса ;)))) Тоже утечка? ;) Кругом одни утечки тогда, хз, куда от них дется ;)))))
> Есть такой тип в C++ string . Приведу пример :
>
>int main(void)
>{
>string s;
>s = "any text";
>return 0;
>}
>Вот там где s = "any text" выделяется память под переменную s
>. Память берется из кучи (heap). Так вот он память не
>возвращает, пока не не произойдет завершение процесса и высвобождает память уже
>сама операционная система. Подскажите способ как эту память все таки удалить
>до завершения процесса?вы бредите.
автоматическая переменная типа std::string уничтожается при раскрутке стека перед выходом из main и вызывается деструктор std::string который освобождает память.
сделайте простейший враппер над std::string и увидите.
>вы бредите.
>автоматическая переменная типа std::string уничтожается при раскрутке стека перед выходом из main
>и вызывается деструктор std::string который освобождает память.
>сделайте простейший враппер над std::string и увидите.Я не думаю, что человеку ведомы раскрутки стека, вероятно он это и имел ввиду под словом "высвобождает сама операционная система" (интересно, каким именно образом он отслеживал точку высвобождения? ;). Автора возмущает сам факт, почему компилятор не догадался, что автору больше не нужна автоматическая переменная, и не удалил ее до выхода из области видимости? ;))) А ведь мог бы, если бы захотел и постарался ;)))
Блин, я ща помру ;)Почему люди не считают нужным хотя бы ознакомится с ртфмом под названием "Язык С++" авторства малоизвестного человека по имени Бьярн Страуструп?
>Я не думаю, что человеку ведомы раскрутки стека, вероятно он это и
>имел ввиду под словом "высвобождает сама операционная система" (интересно, каким именно
>образом он отслеживал точку высвобождения? ;). Автора возмущает сам факт, почему
>компилятор не догадался, что автору больше не нужна автоматическая переменная, и
>не удалил ее до выхода из области видимости? ;))) А ведь
>мог бы, если бы захотел и постарался ;)))
>Блин, я ща помру ;)хех, ну раскрутку стека производит libstdc++ все-таки, а не система :)
>Почему люди не считают нужным хотя бы ознакомится с ртфмом под названием
>"Язык С++" авторства малоизвестного человека по имени Бьярн Страуструп?
такие вот они, люди :)
почему вы думаете большинство "программистов на C++" используют язык как C с классами, имхо отсюда большинство нападок на C++.ладно, старческое ворчание :)
Извиняюсь что не правильно поставил вопрос. Да к сожалению я не очень пока хорошо знаю С++. Я хотел узнать нет ли в типе string явнового способа для высвобождения памяти. Про область видимости я знаю, не могу понять почему память не высвобождается. String у меня находится в структуре которую я размещаю в динамической памяти. Стринг у меня в структуре статик, ну т.е. :
struct st{
int name;
string s;
};
Программа у меня в идеале должна работать довольно долго(бесконечно). Но работает всего четыре дня(запускаю с помощью nohup). По команде top явно видно что растет size и res.
> Извиняюсь что не правильно поставил вопрос.
Вопрос поставлен правильно, но вопрос детский...>Да к сожалению я не очень пока хорошо знаю С++.
...И форум -- не лучшее место для его изучения...>Я хотел узнать нет ли
>в типе 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
>>String у
>>меня находится в структуре которую я размещаю в динамической памяти. >Стринг у меня в структуре статик,
>Это неверное заключение. Статик -- это совсем другое.
угу, это не static, это просто "by value".
>>всего четыре дня(запускаю с помощью nohup). По команде top явно видно
>>что растет size и res.
скорее всего память растет не из-за string :)
может быть из-за того, что вы просто не делаете delete на эту самую свою структуру>Как только возникнет необходимость освободить память, выделенную под s
>(а когда это будет знаете только Вы сами), вызовите явно деструктор string:
>
>
>string str= "Hello!";
>// ...
>str.~string();
для очистки string лучше использовать str.clear(), ибо явно вызывая деструктор можно поиметь некоторые проблемы, ибо насколько я помню стандарт не оговаривает, что деструктор должен оставлять объект в consistent state, и даже если в конкретной реализации это так, то все равно можно нарваться на двойной вызов деструктора.