Старый 19.05.2004, 16:30   #1   
Форумец
 
Сообщений: 2
Регистрация: 19.05.2004
Возраст: 41

fura13 вне форума Не в сети
вроде все просто

Есть такой тип в C++ string . Приведу пример :
int main(void)
{
string s;
s = "any text";
return 0;
}
Вот там где s = "any text" выделяется память под переменную s . Память берется из кучи (heap). Так вот вся радость в том что он память не возвращает, пока не не произойдет завершение процесса и высвобождает память уже сама операционная система. Подскажите способ как эту память все таки удалить до завершения процесса?
  Ответить с цитированием
Старый 19.05.2004, 18:39   #2   
Форумец
 
Сообщений: 83
Регистрация: 25.10.2003
Возраст: 39

ШевТ вне форума Не в сети
а оператор delete?
  Ответить с цитированием
Старый 20.05.2004, 06:48   #3   
Форумец
 
Аватар для zss_vrn
 
Сообщений: 1,986
Регистрация: 27.08.2003

zss_vrn вне форума Не в сети
fura13
Конечно, пока в main создается объект, без явного delete он по завершению main и разрушается.

Строка должна уничтожаться после того, как объект выйдет из области видимости (scope), например, после выхода из функции.

if (someThing) {
string s = "the string";
//-----
}// Вот тут память должна освобождаться

А в данном случае delete не будет работать, потому что s - не указатель.

string *s = new string("Some text");
//...

delete s;

Правда, сам я со string сто лет не работал, может, че уже изменилось На CBuilder есть аналог, там проще.
  Ответить с цитированием
Старый 20.05.2004, 07:17   #4   
Форумец
 
Сообщений: 2
Регистрация: 19.05.2004
Возраст: 41

fura13 вне форума Не в сети
Про область видимости это правильно, но! Дело в том, что даже когда объект выходит из области видимости память почему то не освобождается. Я не утверждаю 100% , но память занятая процессом накапливается(выясненно с помощью профилировщика памяти). Вопрос : как же ее высвободить явно.
  Ответить с цитированием
Старый 20.05.2004, 07:31   #5   
Форумец
 
Аватар для zss_vrn
 
Сообщений: 1,986
Регистрация: 27.08.2003

zss_vrn вне форума Не в сети
fura13
Это сложнее.

Может быть, так ведет себя менеджер памяти ОС. То есть, когда процессу нудна дополнительная память, он ее берет у ОС, но не отдает, когда она освобождается. Может быть, ему надо явно указать вернуть излишки.

А так только со строками происходит или и с другими объектами тоже? Надо бы попробовать.

И еще. Память локальных переменных хранится не в хипе. Строки, правда, особые объекты, они могут вести себя по-другому.
  Ответить с цитированием
Старый 27.05.2004, 18:46   #6   
Форумец
 
Сообщений: 1
Регистрация: 27.05.2004

J0ker вне форума Не в сети
Цитата:
Первоначальное сообщение от fura13
Про область видимости это правильно, но! Дело в том, что даже когда объект выходит из области видимости память почему то не освобождается. Я не утверждаю 100% , но память занятая процессом накапливается
итс импосибл. вы что-то напутали, либо у вас какой-то левый стринг.

J0ker добавил [date]1085672911[/date]:
Цитата:
Первоначальное сообщение от zss_vrn
fura13
Строки, правда, особые объекты, они могут вести себя по-другому.
какие такие особые? ничего особого в C++ не бывает, это вам не паскакаль
  Ответить с цитированием
Старый 28.05.2004, 06:44   #7   
Форумец
 
Аватар для zss_vrn
 
Сообщений: 1,986
Регистрация: 27.08.2003

zss_vrn вне форума Не в сети
J0ker
Цитата:
какие такие особые? ничего особого в C++ не бывает, это вам не паскакаль
Это - смотря из какой библиотеки строки и какой компилятор. Например, опция Merge dubl. strings вмешивается в расположение строк в памяти.
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind