Большой Воронежский Форум
» Программирование>вроде все просто
fura13 16:30 19.05.2004
Есть такой тип в C++ string . Приведу пример :
int main(void)
{
string s;
s = "any text";
return 0;
}
Вот там где s = "any text" выделяется память под переменную s . Память берется из кучи (heap). Так вот вся радость в том что он память не возвращает, пока не не произойдет завершение процесса и высвобождает память уже сама операционная система. Подскажите способ как эту память все таки удалить до завершения процесса? [Ответ]
ШевТ 18:39 19.05.2004
а оператор delete? [Ответ]
zss_vrn 06:48 20.05.2004
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 вмешивается в расположение строк в памяти. [Ответ]
Вверх