【发布时间】:2012-01-23 08:48:25
【问题描述】:
我制作了两个相互复制的 C 程序。
使用 GCC 编译器在 Linux 上编译它们并获得两个独立的可执行文件。
然后我使用objdump 检查了两者的汇编代码,发现指令是相同的。甚至两个文件中对应指令的地址都是一样的。
程序是打印其中一个变量的地址。
程序运行时产生不同的地址,而且同一个程序每次运行时产生不同的地址。
为什么两个程序的代码行地址相同,但同一个程序每次运行时变量的地址都会发生变化?
我怀疑屏幕上打印的地址可能是虚拟地址,但如果是虚拟地址,为什么每次都不能相同? objdump得到的汇编代码中显示的地址也是虚拟的吗?
【问题讨论】:
-
在现代 CPU+操作系统中,几乎所有可见地址都是虚拟的。此外,地址不必相同,因为在大多数编程语言中都没有这样的要求。
标签: c memory-address