首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >brk和sbrk的区别

brk和sbrk的区别
EN

Stack Overflow用户
提问于 2016-05-21 14:06:00
回答 2查看 9.9K关注 0票数 6

我是个新手,有人能用一个简单的例子说出brksbrk之间的确切区别吗?是否有效率因素可供选择?mallocnew在内部调用brksbrk

EN

回答 2

Stack Overflow用户

发布于 2016-05-21 14:11:07

代码语言:javascript
复制
int brk(void *addr);

addr brk()将数据段的末尾设置为

指定的值,当该值合理时,系统有足够的内存,并且进程不会超过其最大数据大小。

如果成功,brk()返回零。出错时,返回-1,并将errno设置为ENOMEM。

代码语言:javascript
复制
void *sbrk(intptr_t increment);

sbrk()以字节为单位递增程序的数据空间。可以使用增量为0的调用sbrk()来查找程序中断的当前位置。

如果成功,sbrk()将返回前一个程序中断。(如果中断增加,则此值是指向新分配内存的开始的指针)。出错时,返回(void *) -1,并将errno设置为ENOMEM。

From linux manual page

票数 9
EN

Stack Overflow用户

发布于 2016-05-21 14:52:13

brk设置数据段的上限,sbrk递增它。在古老的Unixes中,malloc/free使用sbrk。在现代操作系统上,事情可能会有很大的不同,例如,OSX不使用brk/sbrk来管理堆分配,但mmapbrk/sbrk存在,但只是在一小段内存中模拟。这在Linux上几乎是一样的(源代码提到了从brk/sbrk到mmap的转换历史)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37359498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档