16

我有一个自定义分配器函数,它使用 sbrk() 来获取内存。不再需要时如何释放此内存?

malloc() 是否有与 free() 等效的功能?

还是我必须使用 brk() 来设置数据段的结尾?

4

2 回答 2

27

您需要使用brksbrk再次缩小。

最后,你必须修改内存量的唯一方法(除了像系统调用这样的 mmap )是增加或减少堆,所以你用sbrkor向上移动它,然后用负增量或brk向下移动它。brksbrk

于 2010-01-12T20:11:28.513 回答
1

不要使用brksbrk。几乎不可能知道哪些库函数可能会调用malloc,并且可能会随着时间的推移而改变,所以即使你的程序现在可以工作,当有人升级 libc 时它也可能会中断。他们被排除在 POSIX 之外是有充分理由的。

于 2010-07-26T13:32:27.753 回答