【问题标题】:Mapping of arrays from virtual address to physical address数组从虚拟地址到物理地址的映射
【发布时间】:2016-05-07 10:41:27
【问题描述】:

当静态声明一个二维数组时,我们会得到一大块连续的虚拟地址。这些地址不需要映射到物理地址中的连续内存地址。一维数组也会发生同样的情况吗?一维数组中各个元素的地址在物理地址空间中是连续的还是可以映射到不同物理页上的地址?

【问题讨论】:

    标签: arrays virtual-address-space


    【解决方案1】:

    虚拟地址空间与 C 编程中的数组无关(我假设您使用 C)。

    当你有一个二维数组时,最后一个维度只是虚拟的。在幕后,编译器有一个长的一维数组,当你想到达一个特定的节点时,它会在添加第二个索引之前快速将第一个索引和列的运行长度相乘。

    【讨论】:

    • 是的。但那些是虚拟地址对吧?它将被存储的实际位置,即物理地址取决于 TLB 的虚拟到物理地址映射。那么,在这种情况下,一维数组元素是映射到连续的内存位置还是映射到不同页面上的物理地址?
    • 没有。二维数组不需要虚拟地址和 TLB。从内存来看,二维数组和一维数组看起来是一样的。
    • 虚拟地址和 TLB 对用户进程不可见。这一切都发生在操作系统中,允许每个程序拥有唯一的内存,并且不需要了解交换等。
    猜你喜欢
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2020-02-29
    • 2015-05-04
    • 1970-01-01
    相关资源
    最近更新 更多