Как освободить память, полученную с помощью sbrk()?

У меня есть пользовательская функция распределителя, которая использует sbrk() для получения памяти. Как мне освободить эту память, когда она больше не нужна?

Есть ли функция, эквивалентная free() для malloc()?

или я должен использовать brk (), чтобы установить конец сегмента данных?

2 ответа

Решение

Вам нужно использовать brk или же sbrk снова сжиматься.

В конце концов, единственный способ изменить объем памяти (кроме mmap, такой как syscalls) - это увеличить или уменьшить кучу, поэтому вы перемещаете ее с помощью sbrk или же brk и вы двигаете его вниз brk или же sbrk с отрицательным приращением.

Не использовать brk а также sbrk, Невозможно узнать, какие библиотечные функции могут вызывать malloc, и может со временем меняться, поэтому, даже если ваша программа работает сейчас, она может сломаться, когда кто-нибудь обновит libc. Они были исключены из POSIX по очень веской причине.

Другие вопросы по тегам