首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

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

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

[解决办法]
全局变量在编译的时候就可以确定
局部变量一般是运行时分配的,通常在栈上,所以地址确定不了
[解决办法]
你就想一个函数递归调用自己,里面的局部变量地址一样还得了
[解决办法]
这个编译之后是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下运行试试,他们这些基址是不变的,像楼上说的根据用户输入来递归调用,局部变量肯定会有变化的,不过局部变量地址也是可以根据用户输入数据+代码来计算地址的
[解决办法]

探讨
最好举例说明,真心求教

热点排行