malloc()和sbrk()的具体区别是什么?

TopProcess 2013-07-28 01:36:53
当然我也只知道malloc调用了sbrk,但是malloc多了点什么呢?麻烦能详细讲一下,我是菜鸟,希望大家能通俗点哈
...全文
513 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
欧阳春晖 2013-07-28
  • 打赏
  • 举报
回复
malloc是C语言标准函数,sbrk是LINUX系统函数
buyong 2013-07-28
  • 打赏
  • 举报
回复
就我所知,至少gcc中的malloc就没调用sbrk
LubinLew 2013-07-28
  • 打赏
  • 举报
回复
sbrk不是系统调用,是C库函数。系统调用通常提供一种最小界面,而库函数通常提供比较复杂的功能。
酱油小龟 2013-07-28
  • 打赏
  • 举报
回复
sbrk是系统调用,是Unix/Linux系统提供的接口(只能在Unix/Linux系统下才能用的)。而malloc是标准c函数在,所以在Unix/Linux和windows下都能用。 ps:在Unix/Linux下,malloc底层实现就是通过系统调用sbrk实现的;在windows下malloc则是通过调用windows系统提供的接口实现。
AnYidan 2013-07-28
  • 打赏
  • 举报
回复
引用 5 楼 dnvycumt3 的回复:
sbrk是系统调用,是Unix/Linux系统提供的接口(只能在Unix/Linux系统下才能用的)。而malloc是标准c函数在,所以在Unix/Linux和windows下都能用。 ps:在Unix/Linux下,malloc底层实现就是通过系统调用sbrk实现的;在windows下malloc则是通过调用windows系统提供的接口实现。
++
max_min_ 2013-07-28
  • 打赏
  • 举报
回复

如果我没有记错的话,malloc分配完内存,其实实际分配的内存比用户分配的内存要多几个字节,这个用来存放free结束符的,通知对应free到这个字节的时候就结束free,如果破坏了这个预留字节的话,就有可能释放了所有的堆空间的,

貌似sbrk没有这个功能的吧!
void *sbrk(intptr_t increment);
increment 为正数则是 分配内存, 为负数则是释放内存!
而且 sbrk 一般和 brk 成对使用
sbrk负责分配内存,brk负责释放内存!
LubinLew 2013-07-28
  • 打赏
  • 举报
回复
brk和sbrk主要的工作是实现虚拟内存到内存的映射
LubinLew 2013-07-28
  • 打赏
  • 举报
回复
每个进程可访问的虚拟内存空间为3G, 但在程序编译时,不可能也没必要为程序分配这么大的空间, 只分配并不大的数据段空间,程序中动态分配的空间就是从这一块分配的。 如果这块空间不够,malloc函数族(realloc,calloc等)就调用sbrk函数将数据段的下界移动, sbrk函数在内核的管理下将虚拟地址空间映射到内存,供malloc函数使用。
水平不流 2013-07-28
  • 打赏
  • 举报
回复
这个真心不了解,一般只用到malloc
Proteas 2013-07-28
  • 打赏
  • 举报
回复
http://stackoverflow.com/questions/8484863/understanding-c-malloc-and-sbrk

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧