在32位Linux系统上,进程最多可以访问4 GB的虚拟地址空间;然而,在保留任何这些过程中,过程似乎在不同程度上是保守的。因此,使用malloc的程序偶尔会通过系统调用sbrk / brk来扩展其数据段。甚至那些页面也没有在物理内存中声明。我不完全理解的是为什么我们首先需要sbrk,为什么不给我4 GB的地址空间以避免任何sbrk调用,因为直到我们触摸/声明这些块,它本质上是一个免费的操作权? / p>
答案 0 :(得分:5)
如果你对一个文件进行内存映射会发生什么(在Linux下很常见)?它必须在地址空间的某个地方,所以必须有一些方法来定义“使用过的”和“未使用的”部分。
共享内存(实际上只是映射没有实际文件的文件)是相同的。它必须去某个地方,操作系统必须确保它可以放置它而不会覆盖某些东西。
此外,为了明显(和不太明显)的效率原因,最好保持参考局部性。如果您被允许只是在地址空间中的任何位置写信和阅读,您可以打赌有些人会这样做。
答案 1 :(得分:4)
有几个原因可以想到: