Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
PolAR
Зарегистрирован: 01.11.2004 Сообщения: 133
|
Добавлено: Пн Июн 13 2005 15:49 Заголовок сообщения: Непонятные проблемы с динамическим выделением памяти |
|
|
программа под Линуксом, на С++.
В проге очень часто приходится выделять и освобождать память ( ведется табличка в реальном времени ).
выделение производится оператором new освобождение - delete.
Случайно обратил внимание, что процесс постоянно жрет память, никогда не уменьшаясь в размерах, причем приличными дозами, хотя я специально отслеживаю освобождение ненужной памяти!
Для пробы написал програмку, которая выделяет память под большой массив ( чтобы в top было заметно ) и потом освобождает - Эффект тот же, после освобождения процесс отается такого же размера.
Ничего не понимаю!
Зарание спасибо _________________ Come Together!! Right Now.... |
|
Вернуться к началу |
|
|
squirL
Зарегистрирован: 05.01.2005 Сообщения: 371 Откуда: Одесса
|
Добавлено: Пн Июн 13 2005 17:21 Заголовок сообщения: |
|
|
память, выделенная через malloc или new, после выполнения free ()(delete). на самом деле не освобождается. освободится она только по завершении проги |
|
Вернуться к началу |
|
|
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 - помечает эту память как свободную. но реально операционке память не возвращается.
как вам помочь - не знаю. не программер я. можно попытаться вручную двигать брейк адрес хипа... но это по-моему дурость. |
|
Вернуться к началу |
|
|
Wladimir
Зарегистрирован: 02.03.2005 Сообщения: 150 Откуда: Ставропольский край
|
Добавлено: Ср Июн 15 2005 09:35 Заголовок сообщения: |
|
|
А если вместо динамических массивов использовать std :: vector ?
Он у меня по тестам вроде и работал быстрее. |
|
Вернуться к началу |
|
|
squirL
Зарегистрирован: 05.01.2005 Сообщения: 371 Откуда: Одесса
|
Добавлено: Ср Июн 15 2005 09:39 Заголовок сообщения: |
|
|
если используется С++ - то наверное так будет лучше. |
|
Вернуться к началу |
|
|
DmitryShm
Зарегистрирован: 17.11.2003 Сообщения: 211 Откуда: Казань
|
Добавлено: Ср Июн 15 2005 12:16 Заголовок сообщения: Не пытайтесь.. |
|
|
Не пытайтесь делать работу за окружение. Если в системе можно выделить память в 3Мб, то она и выделяет. Только при нехватке ее станет освобождать. Попробуйте запустить прогу при услови нехватки памяти. _________________ love IT |
|
Вернуться к началу |
|
|
PolAR
Зарегистрирован: 01.11.2004 Сообщения: 133
|
Добавлено: Пт Июн 17 2005 10:34 Заголовок сообщения: |
|
|
Спасибо всем!
Я еще покопался в инете и пришел к такому выводу:
Память будет расти до тех пор, пока не превысит некоторое пороговое число. Потом прога начнет использовать ранее освобожденную.
Но это уже было написано выше .
поэтому еще раз спасибо за отзывчивость _________________ 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.... |
|
Вернуться к началу |
|
|
|