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