首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >虚拟内存和sbrk

虚拟内存和sbrk
EN

Stack Overflow用户
提问于 2012-04-25 17:30:04
回答 2查看 799关注 0票数 5

在32位Linux系统上,一个进程最多可以访问4 GB的虚拟地址空间;但是,进程似乎在不同程度上保守地保留了这些空间。因此,使用malloc的程序偶尔会通过syscall sbrk/brk来增加其数据段。即使是那些页面也还没有在物理内存中声明。我不完全理解的是为什么我们首先需要sbrk,为什么不给我4 GB的地址空间来避免任何sbrk调用,因为在我们接触/声明这些块之前,它本质上是一个免费的操作对吧?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-25 17:42:18

如果对文件进行内存映射会发生什么(在Linux下这是一件很常见的事情)?它必须位于地址空间中的某个位置,因此必须有某种方法来定义“已使用”和“未使用”部分。

共享内存(实际上只是映射一个文件,而不是实际的文件)是相同的。它必须到某个地方,并且操作系统必须确保它可以在不覆盖任何东西的情况下放置它。

此外,出于明显的(和不明显的)效率原因,最好保持引用的局部性。如果允许您只对地址空间中的任何位置进行写入和读取,您可以打赌有些人会这样做。

票数 5
EN

Stack Overflow用户

发布于 2012-04-25 17:45:27

有几个原因浮现在脑海中:

当你访问未映射的内存时,你将不再得到段错误

  • Translation lookaside buffer (TLB)会更大,可能需要更多的时间来设置

  • 如果你加载了一个新的共享库或mmap()

,无论如何你都必须取消其中一些内存的映射

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

https://stackoverflow.com/questions/10312893

复制
相关文章

相似问题

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