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

Laz*_*zer 7 c++ malloc sbrk

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

它是如何工作的?

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

顺便问一下,扩展是sbrk()什么?

Mat*_*lin 8

看看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)

现代操作系统可以做得更多,例如将地图页面放入地址空间,并为每个分配的内存块添加跟踪信息.