OS或者编译器怎么识别是全局变量还是局部变量.
操作系统内根本不关心你是什么变量,它只管代理运行程序,也就是进程,负责这些进程之间的调度,不过如果要说操作系统本身也是进程,那倒可以理解;
编译器最终会把程序编译成可执行文件,就是对应的一条一条汇编指令,在程序运行过程中按照定义,就可以有不同的寻址方式,这个就是汇编的内容了,其实不同类型的变量就是寻址方式的不同,说到底还是存储位置不同。
另外,操作系统只分静态变量和自动变量,变量作用域是编译器规定的。
问:
局部变量和全局变量有什么区别,
============================
1.生存周期不同
2.作用域不同
3.编译器会保证全局变量的初始化,局部变量不作保证
操作系统或编译器是如何识别的.
============================
操作系统不识别。
编译器在语义检查的时候识别,具体怎识别,参考《编译原理》
变量是语言层次上的东西 方便人控制的
编译器根据变量定义位置确定是全局 还是局部
全局变量的数据 编译器会分配在堆(heap)上
局部变量的数据 则是运行时在栈(stack)上创建
操作系统负责按照编译器事先分配的地址把程序加载到内存
全局变量怎么会分配在堆上??!!
全局变量与局部静态变量存放位置相同,都放在静态存储区。初始化过的变量存放在静态初始化区,编译时编译器会初始化这部分区域的值;未初始化或初始化为0的变量存放在静态非初始化区。
编译器通常会建一个符号表,里面描述变量的各属性。语法检查与代码生成的时候访问并回填数据。
OS或者编译器怎么识别是全局变量还是局部变量
操作系统不识别。那是编译的时候写死的,运行的时候只管跑。
编译器解析文本结构,获得你写的代码的各种信息。文本结构的解析方法详见编译原理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)