Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Непонятные проблемы с динамическим выделением памяти

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
PolAR



Зарегистрирован: 01.11.2004
Сообщения: 133

СообщениеДобавлено: Пн Июн 13 2005 15:49    Заголовок сообщения: Непонятные проблемы с динамическим выделением памяти Ответить с цитатой

программа под Линуксом, на С++.

В проге очень часто приходится выделять и освобождать память ( ведется табличка в реальном времени ).
выделение производится оператором new освобождение - delete.

Случайно обратил внимание, что процесс постоянно жрет память, никогда не уменьшаясь в размерах, причем приличными дозами, хотя я специально отслеживаю освобождение ненужной памяти!

Для пробы написал програмку, которая выделяет память под большой массив ( чтобы в top было заметно ) и потом освобождает - Эффект тот же, после освобождения процесс отается такого же размера.

Ничего не понимаю! Smile
Зарание спасибо
_________________
Come Together!! Right Now....
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
squirL



Зарегистрирован: 05.01.2005
Сообщения: 371
Откуда: Одесса

СообщениеДобавлено: Пн Июн 13 2005 17:21    Заголовок сообщения: Ответить с цитатой

память, выделенная через malloc или new, после выполнения free ()(delete). на самом деле не освобождается. освободится она только по завершении проги
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
PolAR



Зарегистрирован: 01.11.2004
Сообщения: 133

СообщениеДобавлено: Вт Июн 14 2005 08:31    Заголовок сообщения: Ответить с цитатой

Тогда нафига это вообще нужно???
К тому же везде в описаниях С++ в разделах управления памятью говорят что использование delete после new нужно чтобы программа работающая длительное время ( а моя прога именно такая ) не сожрала всю память!

Прям неприятно, когда после 5-ти минут ведения таблички прога с 780 Кб вырастает в 3 Мб!!!

Есть ли способ принудительно освободить?
_________________
Come Together!! Right Now....
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Sharkky



Зарегистрирован: 10.01.2004
Сообщения: 72

СообщениеДобавлено: Вт Июн 14 2005 16:10    Заголовок сообщения: Ответить с цитатой

Я могу не в тему каркнуть. Но может быть проблема в том, что ты используешь ClassName var = new ClassName[length], а удаляешь просто delete var, а не delete[] var?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
squirL



Зарегистрирован: 05.01.2005
Сообщения: 371
Откуда: Одесса

СообщениеДобавлено: Вт Июн 14 2005 21:07    Заголовок сообщения: Ответить с цитатой

вряд ли. маленький ликбез по выделению памяти в UNIX:
рядом с сегментом данных находится heap. при помощи системных вызовов sbrk и brk из хипа режуться куски. malloc - выделяет с их помощью область памяти, а free - помечает эту память как свободную. но реально операционке память не возвращается.
как вам помочь - не знаю. не программер я. можно попытаться вручную двигать брейк адрес хипа... но это по-моему дурость.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Wladimir



Зарегистрирован: 02.03.2005
Сообщения: 150
Откуда: Ставропольский край

СообщениеДобавлено: Ср Июн 15 2005 09:35    Заголовок сообщения: Ответить с цитатой

А если вместо динамических массивов использовать std :: vector ?
Он у меня по тестам вроде и работал быстрее.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
squirL



Зарегистрирован: 05.01.2005
Сообщения: 371
Откуда: Одесса

СообщениеДобавлено: Ср Июн 15 2005 09:39    Заголовок сообщения: Ответить с цитатой

если используется С++ - то наверное так будет лучше.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
DmitryShm



Зарегистрирован: 17.11.2003
Сообщения: 211
Откуда: Казань

СообщениеДобавлено: Ср Июн 15 2005 12:16    Заголовок сообщения: Не пытайтесь.. Ответить с цитатой

Не пытайтесь делать работу за окружение. Если в системе можно выделить память в 3Мб, то она и выделяет. Только при нехватке ее станет освобождать. Попробуйте запустить прогу при услови нехватки памяти.
_________________
love IT
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
PolAR



Зарегистрирован: 01.11.2004
Сообщения: 133

СообщениеДобавлено: Пт Июн 17 2005 10:34    Заголовок сообщения: Ответить с цитатой

Спасибо всем!
Я еще покопался в инете и пришел к такому выводу:
Память будет расти до тех пор, пока не превысит некоторое пороговое число. Потом прога начнет использовать ранее освобожденную.

Но это уже было написано выше Smile.
поэтому еще раз спасибо за отзывчивость Smile
_________________
Come Together!! Right Now....


Последний раз редактировалось: PolAR (Пт Июн 17 2005 10:36), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
PolAR



Зарегистрирован: 01.11.2004
Сообщения: 133

СообщениеДобавлено: Пт Июн 17 2005 10:36    Заголовок сообщения: Ответить с цитатой

2 Wladimir.
я пользовался map-ом из STL. и судя по тестам память в нем тоже не освобождается.
_________________
Come Together!! Right Now....
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...