【问题标题】:Memory Map How is stack laid and What is the bounary of stackMemory Map 堆栈是如何铺设的,堆栈的边界是什么
【发布时间】:2019-07-24 20:16:42
【问题描述】:

您好,我正在阅读有关内存映射并寻找堆栈的信息,我想到了这个问题,因为 堆栈从内存的末尾开始,但实际上内存的末尾是什么如果是最后一个内存地址,那么对于 32 位操作系统和体系结构,每个程序都应该分配 4GiB 的内存。 MMU和虚拟内存有什么作用?
问候

【问题讨论】:

    标签: memory stack


    【解决方案1】:

    处理器看到的地址总是虚拟地址。因此,内存结束是虚拟内存的结束。您可以拥有非常大的地址,如 2^32-x,但它们是虚拟地址。

    操作系统分配进程所需的物理页面。所以它会在虚拟地址的下端为进程的文本、数据和堆部分分配页面,在上端为堆栈分配页面。操作系统在页表中创建虚拟地址和物理地址之间的等价关系。这样,包含堆栈的上层虚拟地址将被映射到任意位置的物理地址。

    在数据和堆部分与堆栈之间,存在大量未由操作系统分配的未使用的空闲虚拟内存。因此,将 4GB 分配给进程是没有风险的。

    【讨论】:

    • 如果是这样,那么对于 64 位操作系统,大量的虚拟 RAM 将可用,但毕竟它是虚拟的,所以它没有任何区别,这是否意味着物理内存中的堆栈是线性放置的或一些MMU 管理的其他形式。
    猜你喜欢
    • 2011-12-28
    • 1970-01-01
    • 2012-04-21
    • 2014-08-09
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 2016-01-29
    • 2014-10-16
    相关资源
    最近更新 更多