我这个新的任何一个可以告诉之间准确的区别brk和sbrk使用一个简单的例子?是否有任何效率因素可供选择?
malloc和new内部调用brk或sbrk.
int brk(void *addr);
Run Code Online (Sandbox Code Playgroud)
brk()将数据段的结尾设置为addr指定的值,当该值合理时,系统有足够的内存,并且进程不超过其最大数据大小.
成功时,brk()返回零.出错时,返回-1,并将errno设置为ENOMEM.
void *sbrk(intptr_t increment);
Run Code Online (Sandbox Code Playgroud)
sbrk()按递增字节递增程序的数据空间.以增量0调用sbrk()可用于查找程序中断的当前位置.
成功时,sbrk()返回上一个程序中断.(如果中断增加,则此值是指向新分配的内存的开始的指针).出错时,返回(void*) - 1,并将errno设置为ENOMEM.
brk设置数据段的上限,sbrk增加它。在古代 Unix 中malloc/free使用sbrk. 在现代的东西可能是非常不同的,例如,OSX不使用brk/sbrk管理堆分配,但mmap,brk/sbrk的确存在,但在较小的内存段只是仿真。这在 Linux 上几乎相同(源代码提到了从 brk/sbrk 到 mmap 的过渡历史)。