gpt4 book ai didi

linux - 为什么进程的虚拟地址空间有空洞

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:01 27 4
gpt4 key购买 nike

我的教科书说在一个虚拟地址空间中有大洞未映射到任何有意义数据的过程。但是当我们产生一个execute object file的时候,一切就都确定了例如.text、.data、共享对象等,唯一可能需要有间隙的动态事物是堆栈。那么其他间隙来自哪里?为什么我们不压缩所有东西只为堆栈留下一个空隙? enter image description here

enter image description here

另一个问题是,第二张图,未分配的VM页面和未分配的页面有什么区别?

最佳答案

您的图表过于简单化了。这是不正确的:

But when we produce an execute object file, everything is determined such as .text, .data, shared objects etc,

文本和数据等东西是可执行文件中的集合。内存中不存在。

在 64 位系统中,您有超过 10 亿千兆字节的可寻址空间。现有的任何应用程序都无法使用那么多的内存,因此地址空间中会出现空洞。

孔用于保护。大多数系统保留最低页面未映射以创建空指针陷阱。一些系统在堆栈周围放置间隙以捕获上溢和下溢。

有一个系统地址范围。这些通常是保留的,但有很多未使用的空间。这会产生漏洞。

如果您试图保持连续的可用地址范围,就会产生必须保持内存连续的问题。这会产生各种分配问题。

another question is, on the second picture, what's the difference between unallocated VM pages and unallocated pages?

我怀疑他们试图说明未映射到地址空间的页面(即完全无效的页面)和被调出到辅助存储的页面(即会触发页面的页面)之间的区别如果访问错误)。

关于linux - 为什么进程的虚拟地址空间有空洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53734125/

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