不同的逻辑地址

时间:2014-12-06 05:36:48

标签: c operating-system

为什么当我运行

之类的东西时
int i;
printf("%p\n", &i);

每次运行时都会得到不同的逻辑地址,不应该每次运行时都得到相同的逻辑地址,然后映射到不同的物理地址上?

3 个答案:

答案 0 :(得分:0)

这是基于函数的起始地址(main或其他函数)存储在堆栈中的变量。它的地址相对于函数固定。每次执行程序时,main函数都将以任意地址开始。

答案 1 :(得分:0)

内存从堆栈分配给变量或程序。因此,分配的内存基于堆栈中可用的可用空间。当程序首先执行时,一些内存将分配给该执行功能。下次我们执行相同的功能时,堆栈内存将有其他一些空闲内存。简单地说,每次运行程序时,我们都会获得该程序的新堆栈地址。

答案 2 :(得分:0)

在以下每种情况下,内存地址在程序执行期间都是不变的:

  • 静态局部变量
  • 静态全局变量
  • 非静态全局变量

另一方面,局部变量的存储器地址取决于在调用函数时执行程序时堆栈的状态(SP寄存器的值)。