我在哪里可以sbrk()详细了解一下?
它是如何工作的?
在什么情况下我会想使用sbrk(),而不是繁琐的malloc()和new()?
顺便问一下,扩展是sbrk()什么?
看看brk/sbrk的规格.
该调用基本上要求OS通过将先前的"中断值"增加一定量来为应用程序分配更多内存.此数量(第一个参数)是应用程序获得的额外内存量.
大多数基本的malloc实现都是基于sbrk系统调用来获取它们分裂和跟踪的内存块.该MMAP功能通常被认为是一个更好的选择(这就是为什么像mallocs支持dlmalloc都与#ifdef来).
至于"它如何运作",最简单的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;
}
Run Code Online (Sandbox Code Playgroud)
现代操作系统可以做得更多,例如将地图页面放入地址空间,并为每个分配的内存块添加跟踪信息.