我是一名新手,能否有人用简单的例子告诉我brk
和sbrk
的确切区别?在这两者中选择有没有效率因素?malloc
和new
内部都调用brk
或sbrk
。
int brk(void *addr);
void *sbrk(intptr_t increment);
成功时,sbrk()返回以前的程序断点。(如果断点被增加,则该值是指向新分配内存开始的指针)。出错时,返回(void*)-1,并将errno设置为ENOMEM。
brk
函数设置数据段的上限,sbrk
函数增加它。在古老的 Unix 系统中,malloc/free
使用 sbrk
。在现代系统中,情况可能会大不相同,例如,OSX 不使用 brk/sbrk
来管理堆分配,而是使用 mmap
,brk/sbrk
存在,但只是在内存的一个小段中进行模拟。这在 Linux 上几乎相同(提到了从 brk/sbrk 过渡到 mmap 的历史的源代码)。