Как освободить память, полученную с помощью sbrk ()? - PullRequest
15 голосов
/ 12 января 2010

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

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

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

Ответы [ 2 ]

24 голосов
/ 12 января 2010

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

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

0 голосов
/ 26 июля 2010

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

...