免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 13268 | 回复: 8
打印 上一主题 下一主题

brk和sbrk的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-23 20:35 |只看该作者 |倒序浏览
有没有仁兄能够赐教brk和sbrk的用法,我现在还不是太明了。
问题1:brk,sbrk是否是用来调整进程数据段空间的函数?他们开辟出来的空间是否是连续的?他们开辟出来的空间又如何释放呢?
问题2:brk的函数声明为int brk(void *endds),那是否意味着我必须先用malloc申请一段空间后,再用brk调整之?
希望各位大虾不吝赐教。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-04-23 23:02 |只看该作者

brk和sbrk的问题

这两个函数我也没用过,不是很清楚。
不过它们比malloc底层。
如果你想自己实现内存管理,一般是用sbrk先申请空间,
然后实现自己的malloc函数来管理内存。

论坛徽章:
0
3 [报告]
发表于 2004-04-24 13:33 |只看该作者

brk和sbrk的问题

那请问是不是说我一开始就要用sbrk申请足够大的空间呢?如果这个空间不够,我是不是用这个函数再追加申请呢?追加的空间是连续的吗?申请的空间如何释放呢?

论坛徽章:
0
4 [报告]
发表于 2004-04-24 23:13 |只看该作者

brk和sbrk的问题

brk和sbrk主要的工作是实现虚拟内存到内存的映射.在GNUC中,内存分配是这样的:
      每个进程可访问的虚拟内存空间为3G,但在程序编译时,不可能也没必要为程序分配这么大的空间,只分配并不大的数据段空间,程序中动态分配的空间就是从这一块分配的。如果这块空间不够,malloc函数族(realloc,calloc等)就调用sbrk函数将数据段的下界移动,sbrk函数在内核的管理下将虚拟地址空间映射到内存,供malloc函数使用。(参见linux内核情景分析)

      所以,用户程序一般不会使用这些系统调用,除非编写自己的内存管理函数或者编写类似编译器、连接器之类的程序。

论坛徽章:
0
5 [报告]
发表于 2004-04-27 10:41 |只看该作者

brk和sbrk的问题

据我理解,sbrk就是到数据段去划出一段空间,再调用一次就再划出一段空间,那如果程序结束后,我要释放这段空间,我该如何做呢?是在sbrk中使用负值的参数吗?如果是,那么我申请了好几次,那么释放时这个负值应该是几次申请空间的累加和吗?

论坛徽章:
0
6 [报告]
发表于 2008-10-14 11:33 |只看该作者
我也遇到这问题了

论坛徽章:
0
7 [报告]
发表于 2008-10-14 11:35 |只看该作者
用户程序不要自己调用.
按理说,brk不应该放到库中让用户使用.

论坛徽章:
0
8 [报告]
发表于 2008-10-14 11:38 |只看该作者
程序结束后, 不用你释放, OS就给你释放了

原帖由 cc8829 于 2004-4-27 10:41 发表
据我理解,sbrk就是到数据段去划出一段空间,再调用一次就再划出一段空间,那如果程序结束后,我要释放这段空间,我该如何做呢?是在sbrk中使用负值的参数吗?如果是,那么我申请了好几次,那么释放时这个负值应 ...

论坛徽章:
0
9 [报告]
发表于 2014-10-07 15:06 |只看该作者
brk / sbrk 不用手动释放?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP