gpt4 book ai didi

linux - 虚拟内存和 sbrk

转载 作者:IT王子 更新时间:2023-10-29 01:12:16 27 4
gpt4 key购买 nike

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

最佳答案

如果你对文件进行内存映射(在 Linux 下很常见)会发生什么?它必须位于地址空间中的某个位置,因此必须有一些方法来定义“已使用”和“未使用”部分。
共享内存(实际上只是映射一个没有实际文件的文件)是一样的。它必须去某个地方,并且操作系统必须确保它可以放置它而不会覆盖某些东西。

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

关于linux - 虚拟内存和 sbrk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10312893/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com