怎么理解全局变量的地址在汇编时就已经确定,而局部变量地址受运行环境的影响,是不确定的

如何理解全局变量的地址在汇编时就已经确定,而局部变量地址受运行环境的影响,是不确定的
最好举例说明,真心求教

------解决方案--------------------
全局变量在编译的时候就可以确定
局部变量一般是运行时分配的,通常在栈上,所以地址确定不了
------解决方案--------------------
你就想一个函数递归调用自己,里面的局部变量地址一样还得了
------解决方案--------------------
这个编译之后是Label地址,这个obj在不同版本的编译器上编译出来的exe地址都是不同的。
一个字节在内存中的地址包括基址、偏移地址,而基址是linker选项里面的一般VC都是用 /BASE:00400000 ,而偏移地址又看linker对数据段的区分,在目前的win中内存都是以0x1000对齐的。
这样看来VC默认编译最小的代码在0x00401000处(一般这里的代码都是jmp xxxx,是个函数表,vc用这种方法便于编译链接)。这样全局变量就是在全局数据区,而静态变量在静态区,而一些编译器会把静态数据也归到全局数据区(这样少了一个短,exe文件会变小,磁盘中是以0x400对齐的)。至于栈中数据,一般基址是0x00130000(由于栈是向下增长的一般我们看到的是0x0012ffxx),哪个局部变量在哪里其实看代码都是能算出来的,比如分配局部数据 sub esp,xx ,push xxxx什么的,一个程序编译好了以到不同的windows下运行试试,他们这些基址是不变的,像楼上说的根据用户输入来递归调用,局部变量肯定会有变化的,不过局部变量地址也是可以根据用户输入数据+代码来计算地址的
------解决方案--------------------
探讨
最好举例说明,真心求教