gpt4 book ai didi

c++ - sbrk() 在 C++ 中如何工作?

转载 作者:可可西里 更新时间:2023-11-01 18:19:34 25 4
gpt4 key购买 nike

我在哪里可以详细了解 sbrk()

它究竟是如何工作的?

在什么情况下我想使用 sbrk() 而不是繁琐的 malloc()new()

顺便说一句,sbrk() 的扩展是什么?

最佳答案

看看the specification for brk/sbrk .

该调用基本上要求操作系统通过将先前的“中断值”递增一定量来为应用程序分配更多内存。这个数量(第一个参数)是您的应用程序随后获得的额外内存量。

大多数基本的 malloc 实现都建立在 sbrk 系统调用之上,以获取它们拆分和跟踪的内存块。 mmap函数通常被认为是更好的选择(这就是为什么像 dlmalloc 这样的 mallocs 支持带有 #ifdef 的 malloc)。

至于“它是如何工作的”,最简单级别的 sbrk 可能看起来像这样:

uintptr_t current_break; // Some global variable for your application.
// This would probably be properly tracked by the OS for the process
void *sbrk(intptr_t incr)
{
uintptr_t old_break = current_break;
current_break += incr;
return (void*) old_break;
}

现代操作系统会做更多的事情,例如将页面映射到地址空间并为分配的每个内存块添加跟踪信息。

关于c++ - sbrk() 在 C++ 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2076532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com