为什么无法访问物理内存中的连续内存地址
why cannot access to contiguous memory addresses in physical memory
根据以下 link 中的 Microsoft 文档:
https://msdn.microsoft.com/en-us/library/windows/hardware/hh439648%28v=vs.85%29.aspx
- A program can use a contiguous range of virtual addresses to access a
large memory buffer that is not contiguous in physical memory.
所以有一个问题,为什么在物理内存中不能为进程提供连续的内存?
由于文档还有另一个问题,下图演示了用户和系统的虚拟内存space:
系统虚拟地址space在整个内存中是唯一的,但是每个进程都有一个虚拟地址space?
谢谢。
您的问题很简单!您问的是为什么我们可以在虚拟内存中拥有大内存缓冲区,而在物理内存中却不能!那是因为我们受限于硬件!如果我们能够在物理内存上访问尽可能多的缓冲区,那么行业必须制造 1024GB 内存才能满足我们的需求!但我们使用的是 8GB 内存,我们很满意...!虚拟内存的存在可以满足我们的需求并使硬件更加高效!
希望对您有所帮助<3
首先,当进程加载到内存中时,OS 可以优化以连续加载进程页面到物理 memory.The 内存中的进程页面由于换入和换出而不能总是连续的,因为内存中有其他进程和东西占用了space,所以如果后面一些进程页用得少了就换回硬盘,再次需要的时候不保证加载到换出之前的相同位置,因为那里可能有另一个进程页面。您应该阅读有关虚拟内存的内容以更好地理解所有这些内容。
根据以下 link 中的 Microsoft 文档:
https://msdn.microsoft.com/en-us/library/windows/hardware/hh439648%28v=vs.85%29.aspx
- A program can use a contiguous range of virtual addresses to access a large memory buffer that is not contiguous in physical memory.
所以有一个问题,为什么在物理内存中不能为进程提供连续的内存?
由于文档还有另一个问题,下图演示了用户和系统的虚拟内存space:
系统虚拟地址space在整个内存中是唯一的,但是每个进程都有一个虚拟地址space?
谢谢。
您的问题很简单!您问的是为什么我们可以在虚拟内存中拥有大内存缓冲区,而在物理内存中却不能!那是因为我们受限于硬件!如果我们能够在物理内存上访问尽可能多的缓冲区,那么行业必须制造 1024GB 内存才能满足我们的需求!但我们使用的是 8GB 内存,我们很满意...!虚拟内存的存在可以满足我们的需求并使硬件更加高效!
希望对您有所帮助<3
首先,当进程加载到内存中时,OS 可以优化以连续加载进程页面到物理 memory.The 内存中的进程页面由于换入和换出而不能总是连续的,因为内存中有其他进程和东西占用了space,所以如果后面一些进程页用得少了就换回硬盘,再次需要的时候不保证加载到换出之前的相同位置,因为那里可能有另一个进程页面。您应该阅读有关虚拟内存的内容以更好地理解所有这些内容。