Как освободить память, полученную с помощью sbrk()?
У меня есть пользовательская функция распределителя, которая использует sbrk() для получения памяти. Как мне освободить эту память, когда она больше не нужна?
Есть ли функция, эквивалентная free() для malloc()?
или я должен использовать brk (), чтобы установить конец сегмента данных?
2 ответа
Вам нужно использовать brk
или же sbrk
снова сжиматься.
В конце концов, единственный способ изменить объем памяти (кроме mmap, такой как syscalls) - это увеличить или уменьшить кучу, поэтому вы перемещаете ее с помощью sbrk
или же brk
и вы двигаете его вниз brk
или же sbrk
с отрицательным приращением.
Не использовать brk
а также sbrk
, Невозможно узнать, какие библиотечные функции могут вызывать malloc
, и может со временем меняться, поэтому, даже если ваша программа работает сейчас, она может сломаться, когда кто-нибудь обновит libc. Они были исключены из POSIX по очень веской причине.