Есть такой тип в C++ string . Приведу пример :
int main(void)
{
string s;
s = "any text";
return 0;
}
Вот там где s = "any text" выделяется память под переменную s . Память берется из кучи (heap). Так вот вся радость в том что он память не возвращает, пока не не произойдет завершение процесса и высвобождает память уже сама операционная система. Подскажите способ как эту память все таки удалить до завершения процесса?
[Ответ]
fura13
Конечно, пока в main создается объект, без явного delete он по завершению main и разрушается.
Строка должна уничтожаться после того, как объект выйдет из области видимости (scope), например, после выхода из функции.
if (someThing) {
string s = "the string";
//-----
}// Вот тут память должна освобождаться
А в данном случае delete не будет работать, потому что s - не указатель.
string *s = new string("Some text");
//...
delete s;
Правда, сам я со string сто лет не работал, может, че уже изменилось На CBuilder есть аналог, там проще.
[Ответ]
fura13 07:17 20.05.2004
Про область видимости это правильно, но! Дело в том, что даже когда объект выходит из области видимости память почему то не освобождается. Я не утверждаю 100% , но память занятая процессом накапливается(выясненно с помощью профилировщика памяти). Вопрос : как же ее высвободить явно.
[Ответ]
zss_vrn 07:31 20.05.2004
fura13
Это сложнее.
Может быть, так ведет себя менеджер памяти ОС. То есть, когда процессу нудна дополнительная память, он ее берет у ОС, но не отдает, когда она освобождается. Может быть, ему надо явно указать вернуть излишки.
А так только со строками происходит или и с другими объектами тоже? Надо бы попробовать.
И еще. Память локальных переменных хранится не в хипе. Строки, правда, особые объекты, они могут вести себя по-другому.
[Ответ]
J0ker 18:46 27.05.2004
Сообщение от : Первоначальное сообщение от fura13 Про область видимости это правильно, но! Дело в том, что даже когда объект выходит из области видимости память почему то не освобождается. Я не утверждаю 100% , но память занятая процессом накапливается
итс импосибл. вы что-то напутали, либо у вас какой-то левый стринг.
J0ker добавил [date]1085672911[/date]:
Сообщение от : Первоначальное сообщение от zss_vrn fura13
Строки, правда, особые объекты, они могут вести себя по-другому.
какие такие особые? ничего особого в C++ не бывает, это вам не паскакаль
[Ответ]
zss_vrn 06:44 28.05.2004
J0ker
Сообщение от :
какие такие особые? ничего особого в C++ не бывает, это вам не паскакаль
Это - смотря из какой библиотеки строки и какой компилятор. Например, опция Merge dubl. strings вмешивается в расположение строк в памяти.
[Ответ]