Memory 阵列的物理内存地址是否也像虚拟内存地址一样按顺序存储? 我的意思是当我们有C++表时: int-tab[3]={1,2,3}我们知道,如果tab地址是X,那么tab[1]的地址是X+1。我读了一些关于虚拟地址和物理地址的书,所以我猜这些地址是虚拟的。因此,如果物理内存中的tab是Y地址,那么tab[1]是Y+1或者不必是?

Memory 阵列的物理内存地址是否也像虚拟内存地址一样按顺序存储? 我的意思是当我们有C++表时: int-tab[3]={1,2,3}我们知道,如果tab地址是X,那么tab[1]的地址是X+1。我读了一些关于虚拟地址和物理地址的书,所以我猜这些地址是虚拟的。因此,如果物理内存中的tab是Y地址,那么tab[1]是Y+1或者不必是?,memory,operating-system,Memory,Operating System,它不必是。操作系统可以自由地使用硬件可以支持的虚拟内存到物理内存的任何映射。某些虚拟内存地址甚至可能无法映射到物理内存,例如,如果由于物理内存不足,表的部分内容已交换到磁盘。首先;对于虚拟内存和物理内存来说,页面内的所有连续内容都是连续的 如果数组恰好跨页面边界拆分(例如,一个页面中的前半部分,另一个页面中的后半部分),或者如果数组太大,无法容纳2(或3)个页面,那么它在虚拟内存中仍然是连续的,但在物理内存中可能不是连续的 对于大多数事情,“物理内存中的非连续性”并不重要 但是,;对于(直接映射

它不必是。操作系统可以自由地使用硬件可以支持的虚拟内存到物理内存的任何映射。某些虚拟内存地址甚至可能无法映射到物理内存,例如,如果由于物理内存不足,表的部分内容已交换到磁盘。

首先;对于虚拟内存和物理内存来说,页面内的所有连续内容都是连续的

如果数组恰好跨页面边界拆分(例如,一个页面中的前半部分,另一个页面中的后半部分),或者如果数组太大,无法容纳2(或3)个页面,那么它在虚拟内存中仍然是连续的,但在物理内存中可能不是连续的

对于大多数事情,“物理内存中的非连续性”并不重要

但是,;对于(直接映射和关联)缓存,存在潜在的效率损失。要理解这一点,请想象一下,如果有一个64 KiB的缓存,而您有一个64 KiB的数组,但是物理地址恰好使用了缓存中的相同条目,那么最终可能会导致该数组争夺同样的少量缓存(并且无法使用大部分缓存)

为了防止这个问题,好的操作系统使用一种叫做“页面着色”或“缓存着色”的东西;这主要意味着分配物理页时,页(决定数据在缓存中的最终位置的地址位)看起来是连续的(即使物理页实际上不是连续的)。您可以在此处阅读更多关于此的信息: