Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Sunny
Зарегистрирован: 05.12.2001 Сообщения: 4
|
Добавлено: Ср Дек 05 2001 00:58 Заголовок сообщения: Как вернуть освобожденную память системе (на C) ? |
|
|
Пишу прогу под Виндами на С с использованием портированных glib и gtk. Прога интенсивно работает с динамической памятью. Вызовы free память освобождают, но системе не возвращают, при этом новые malloc-и почему-то не используют освобожденную память, а запрашивают новую у системы, в результате чего прога отедает у системы кучу памяти. Что делать? |
|
Вернуться к началу |
|
|
Макс ПВС-ник Гость
|
Добавлено: Ср Дек 05 2001 12:36 Заголовок сообщения: Re: Как вернуть освобожденную память системе (на C) ? |
|
|
Во-первых, лучше использовать операторы new и delete, которые гораздо надежнее и удобнее. Во-вторых, есть ф-ии для проверки кучи и сборки мусора в ней. Если честно, конкретных названий я не помню, но посмотри в . |
|
Вернуться к началу |
|
|
Sunny
Зарегистрирован: 05.12.2001 Сообщения: 4
|
Добавлено: Ср Дек 05 2001 22:29 Заголовок сообщения: Re: Как вернуть освобожденную память системе (на C) ? |
|
|
Проблема в том, что функций, подходящих для этих целей, я не нашел. |
|
Вернуться к началу |
|
|
Bear
Зарегистрирован: 27.10.2002 Сообщения: 5 Откуда: Moskva
|
Добавлено: Чт Дек 06 2001 01:56 Заголовок сообщения: Re: Как вернуть освобожденную память системе (на C) ? |
|
|
Нужно написать свой диспетчер памяти. Выделение памяти за 1 раз большой объем. Затем из этого куска отедается сколько нужно, устанавливается указатель на свободный пул, при возврате указатель возвращается. |
|
Вернуться к началу |
|
|
Sunny
Зарегистрирован: 05.12.2001 Сообщения: 4
|
Добавлено: Чт Дек 06 2001 09:03 Заголовок сообщения: Re: Как вернуть освобожденную память системе (на C) ? |
|
|
Спасибо, но нельзя ли чуть подробнее? Какие ф-ции нужно смотреть? |
|
Вернуться к началу |
|
|
ilyasov Гость
|
Добавлено: Чт Дек 06 2001 10:52 Заголовок сообщения: Фрагментация |
|
|
Это какое-то странное поведение. Память, освобожденная в программе, действительно, не обязана возвращаться сразу системе (для обеспечения эффективности работы кода), но новое выделение обязано использовать тот объем свободной памяти, который был освобожден в программе. Единственное логичное объяснение состоит в том, что выделенная память была фрагментирована таким образом, что ее повторное выделение для других объектов невозможно. Если это так, то единственный способ борьбы с таким явлением -исправление кода программы с учетом этого момента. |
|
Вернуться к началу |
|
|
Sunny
Зарегистрирован: 05.12.2001 Сообщения: 4
|
Добавлено: Чт Дек 06 2001 17:30 Заголовок сообщения: Re: Фрагментация |
|
|
Похоже, что действительно так... Спасибо, попробую что-нибудь переделать. |
|
Вернуться к началу |
|
|
|