【发布时间】:2019-07-24 20:16:42
【问题描述】:
您好,我正在阅读有关内存映射并寻找堆栈的信息,我想到了这个问题,因为 堆栈从内存的末尾开始,但实际上内存的末尾是什么如果是最后一个内存地址,那么对于 32 位操作系统和体系结构,每个程序都应该分配 4GiB 的内存。 MMU和虚拟内存有什么作用?
问候
【问题讨论】:
您好,我正在阅读有关内存映射并寻找堆栈的信息,我想到了这个问题,因为 堆栈从内存的末尾开始,但实际上内存的末尾是什么如果是最后一个内存地址,那么对于 32 位操作系统和体系结构,每个程序都应该分配 4GiB 的内存。 MMU和虚拟内存有什么作用?
问候
【问题讨论】:
处理器看到的地址总是虚拟地址。因此,内存结束是虚拟内存的结束。您可以拥有非常大的地址,如 2^32-x,但它们是虚拟地址。
操作系统分配进程所需的物理页面。所以它会在虚拟地址的下端为进程的文本、数据和堆部分分配页面,在上端为堆栈分配页面。操作系统在页表中创建虚拟地址和物理地址之间的等价关系。这样,包含堆栈的上层虚拟地址将被映射到任意位置的物理地址。
在数据和堆部分与堆栈之间,存在大量未由操作系统分配的未使用的空闲虚拟内存。因此,将 4GB 分配给进程是没有风险的。
【讨论】: