如何释放 sbrk() 获得的内存?

发布于 2024-08-17 14:28:17 字数 126 浏览 9 评论 0原文

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

malloc() 是否有相当于 free() 的函数?

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

I have a custom allocator function which uses sbrk() to obtain memory.
How do I release this memory when it's no longer needed?

Is there a function equivalent to free() for malloc() ?

or do I have to use brk() to set the end of the data segment ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

青萝楚歌 2024-08-24 14:28:17

您需要再次使用 brksbrk 来缩小。

最后,您必须修改内存量的唯一方法(除了像系统调用这样的 mmap 之外)是增加或减少堆,因此您可以使用 sbrkbrk< /code> 并使用 brksbrk 以负增量将其向下移动。

You need to use brk or sbrk again to shrink.

In the end the only way you have to modify the amount of memory(apart from mmap like syscalls), is to increase or decrease the heap, so you move it up with sbrk or brk and you move it down with brk or sbrk with a negative increment.

紧拥背影 2024-08-24 14:28:17

不要使用 brksbrk。几乎不可能知道哪些库函数可能会调用 malloc,并且可能会随着时间的推移而发生变化,因此即使您的程序现在可以运行,当有人升级 libc 时它也可能会崩溃。它们被排除在 POSIX 之外是有充分理由的。

Don't use brk and sbrk. It's pretty much impossible to know which library functions might call malloc, and could change over time, so even if your program works now, it might break when somebody upgrades libc. They were excluded from POSIX for a very good reason.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文