为什么当我运行
之类的东西时int i;
printf("%p\n", &i);
每次运行时都会得到不同的逻辑地址,不应该每次运行时都得到相同的逻辑地址,然后映射到不同的物理地址上?
答案 0 :(得分:0)
这是基于函数的起始地址(main或其他函数)存储在堆栈中的变量。它的地址相对于函数固定。每次执行程序时,main函数都将以任意地址开始。
答案 1 :(得分:0)
内存从堆栈分配给变量或程序。因此,分配的内存基于堆栈中可用的可用空间。当程序首先执行时,一些内存将分配给该执行功能。下次我们执行相同的功能时,堆栈内存将有其他一些空闲内存。简单地说,每次运行程序时,我们都会获得该程序的新堆栈地址。
答案 2 :(得分:0)
在以下每种情况下,内存地址在程序执行期间都是不变的:
另一方面,局部变量的存储器地址取决于在调用函数时执行程序时堆栈的状态(SP寄存器的值)。