不同的程序,相同的变量,内存中的相同地址

jas*_*son 1 c memory

我有两个C代码.test.c是

#include <stdlib.h>

int main ()
{
    int a;
    a = 5;
    return a;
}
Run Code Online (Sandbox Code Playgroud)

test2.c是

#include <stdlib.h>

int main ()
{
    int a;
    a = 6;
    return a;
}
Run Code Online (Sandbox Code Playgroud)

当我运行它们并使用gdb检查"a"s内存中的地址时,我得到相同的地址.为什么会这样?

断点1,main()在test.c:7 7返回a; (gdb)print&$ 1 =(int*)0x7fffffffe1cc

断点1,main()在test2.c:7 7返回a; (gdb)print&$ 1 =(int*)0x7fffffffe1cc

Phi*_*rry 5

"a"的地址位于程序的堆栈框架上.这是一个虚拟地址,与程序实际加载的物理内存位置无关.因此,如果两个(几乎相同的)程序使用相同的地址,那就不足为奇了.