我在 Linux 操作系统中使用 gcc。我禁用了 ASLR 。现在,我总是按预期为我声明的数组获取相同的虚拟地址。
现在,我的问题是,在我的程序执行期间,虚拟地址到物理地址的映射是否也相同,或者,在我的程序执行期间,虚拟地址到物理地址的映射是否发生变化?
我的问题的任何答案/指针将不胜感激。提前致谢。
最佳答案
通常从虚拟地址到物理地址的映射在执行期间保持不变,只有少数异常(exception)。例如,如果您的阵列所在的页面成为交换到磁盘的牺牲品,操作系统可能会稍后将其重新映射到另一个物理地址。
但为什么需要将数组固定在物理内存中?您只能从内核操裁剪理内存,如果您已经在内核中执行某些操作,则始终可以执行页面检查以获取实际的和最新的翻译。
关于linux - 在 Linux 操作系统中禁用 ASLR 后,虚拟到物理映射是否已修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19950372/