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

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

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

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

Ответ 1

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

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

Ответ 2

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