如何更改虚拟内存页面位置?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何更改虚拟内存页面位置?相关的知识,希望对你有一定的参考价值。
因此,当我们第一次引用已提交的页面时,物理内存中的一个页面被定位,并且这些地址(一个在虚拟地址空间中,一个在物理地址空间中)在页面条目中连接。现在,由于每个应用程序都必须使用virtaul内存并通过该层,理论上可以在不实际复制每个字节的情况下移动内存。我的意思是更改虚拟地址空间中的页面地址。因此,例如,如果一个页面条目说:“嘿,物理内存中的第11页与ID为1001的进程虚拟空间中的第156页相关联”,我想将第156页移到169-第页,我可以更改此页面条目说:“嘿,物理内存中的第11页与ID为1001的进程虚拟空间中的第169页相关联”。 Windows或Linux操作系统是否提供了我可以使用的功能?
你的问题很好,但是有点不匹配。
通常:虚拟内存地址转换的管理是操作系统级别任务,而不是编译器或应用程序级别活动。事实上,大多数操作系统都竭尽全力使流程透明化。因为这样的语言并没有真正涉及到这一点。
现在,如果您使用的操作系统支持这种内存地址重定位,最明显的方法是将此OS功能封装在C ++实体中,如现有OS接口类中的方法或新类。
现在,如果您有所需操作系统调用的示例代码,那么主题就变成了“我如何在C ++中封装这些代码?”这开启了对C ++和OOP技术的讨论。
另一方面,如果您不知道所需的操作系统调用,这会导致您希望完成此任务的特定操作系统的问题?这开启了操作系统和内存管理的讨论。
应用程序不知道任何物理内存以及逻辑页面映射到哪个页面框架。完全可能(并且经常发生)逻辑页面到物理页面映射以在程序执行时改变。
在某些系统上,可以将多个逻辑页面映射到同一物理页面。但是,应用程序无法控制映射到哪个物理页面。
参见例如Memory Mapping the same file multiple times?
以上是关于如何更改虚拟内存页面位置?的主要内容,如果未能解决你的问题,请参考以下文章