
| Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
![]() |
||
вроде все просто
|
||
| Философия, технологии, алгоритмы! |
![]() |
|
|
Опции темы |
|
|
#1 |
|
Форумец
Сообщений: 2
Регистрация: 19.05.2004
Возраст: 41
|
вроде все просто
Есть такой тип в C++ string . Приведу пример :
int main(void) { string s; s = "any text"; return 0; } Вот там где s = "any text" выделяется память под переменную s . Память берется из кучи (heap). Так вот вся радость в том что он память не возвращает, пока не не произойдет завершение процесса и высвобождает память уже сама операционная система. Подскажите способ как эту память все таки удалить до завершения процесса? |
|
|
|
|
#3 |
|
Форумец
Сообщений: 1,986
Регистрация: 27.08.2003
|
fura13
Конечно, пока в main создается объект, без явного delete он по завершению main и разрушается. Строка должна уничтожаться после того, как объект выйдет из области видимости (scope), например, после выхода из функции. if (someThing) { string s = "the string"; //----- }// Вот тут память должна освобождаться А в данном случае delete не будет работать, потому что s - не указатель. string *s = new string("Some text"); //... delete s; Правда, сам я со string сто лет не работал, может, че уже изменилось На CBuilder есть аналог, там проще.
|
|
|
|
|
#4 |
|
Форумец
Сообщений: 2
Регистрация: 19.05.2004
Возраст: 41
|
Про область видимости это правильно, но! Дело в том, что даже когда объект выходит из области видимости память почему то не освобождается. Я не утверждаю 100% , но память занятая процессом накапливается(выясненно с помощью профилировщика памяти). Вопрос : как же ее высвободить явно.
|
|
|
|
|
#5 |
|
Форумец
Сообщений: 1,986
Регистрация: 27.08.2003
|
fura13
Это сложнее. Может быть, так ведет себя менеджер памяти ОС. То есть, когда процессу нудна дополнительная память, он ее берет у ОС, но не отдает, когда она освобождается. Может быть, ему надо явно указать вернуть излишки. А так только со строками происходит или и с другими объектами тоже? Надо бы попробовать. И еще. Память локальных переменных хранится не в хипе. Строки, правда, особые объекты, они могут вести себя по-другому. |
|
|
|
|
#6 | ||
|
Форумец
Сообщений: 1
Регистрация: 27.05.2004
|
Цитата:
J0ker добавил [date]1085672911[/date]: Цитата:
|
||
|
|
|
|
#7 | |
|
Форумец
Сообщений: 1,986
Регистрация: 27.08.2003
|
J0ker
Цитата:
|
|
|
|