【发布时间】:2019-04-28 18:01:05
【问题描述】:
我是 Linux 和虚拟内存的初学者,仍在努力理解虚拟内存和可执行对象文件之间的关系。
假设我们有一个存储在硬盘上的可执行目标文件 a.out,假设最初 a.out 有一个带有全局变量的 .data 部分值为 2018 的变量。 当加载器运行时,它分配一个连续的虚拟页面块,将它们标记为无效(即未缓存)并将它们的页表条目指向 a.out 中的适当位置。加载程序实际上从不将任何数据从磁盘复制到内存中。第一次引用每个页面时,虚拟内存系统会根据需要自动调入数据。
我的问题是:假设程序在运行时将全局变量的值从 2018 更改为 2019,似乎包含全局变量的虚拟页面最终会分页到磁盘,这意味着 .data 部分的全局变量现在是 2019,所以我们更改了不应该更改的可执行目标文件?否则每次我们完成并再次运行程序时都会得到不同的值?
【问题讨论】:
标签: linux linker operating-system executable virtual-memory