面试题1:OS或者编译器怎么识别是全局变量还是局部变量

OS或者编译器怎么识别是全局变量还是局部变量.

 

操作系统内根本不关心你是什么变量,它只管代理运行程序,也就是进程,负责这些进程之间的调度,不过如果要说操作系统本身也是进程,那倒可以理解;
编译器最终会把程序编译成可执行文件,就是对应的一条一条汇编指令,在程序运行过程中按照定义,就可以有不同的寻址方式,这个就是汇编的内容了,其实不同类型的变量就是寻址方式的不同,说到底还是存储位置不同。

另外,操作系统只分静态变量和自动变量,变量作用域是编译器规定的。

 

问:
局部变量和全局变量有什么区别,
============================
1.生存周期不同
2.作用域不同
3.编译器会保证全局变量的初始化,局部变量不作保证

操作系统或编译器是如何识别的.
============================
操作系统不识别。
编译器在语义检查的时候识别,具体怎识别,参考《编译原理》

 

 

变量是语言层次上的东西  方便人控制的
编译器根据变量定义位置确定是全局  还是局部
全局变量的数据  编译器会分配在堆(heap)上
局部变量的数据  则是运行时在栈(stack)上创建
操作系统负责按照编译器事先分配的地址把程序加载到内存

 

 

全局变量怎么会分配在堆上??!!
全局变量与局部静态变量存放位置相同,都放在静态存储区。初始化过的变量存放在静态初始化区,编译时编译器会初始化这部分区域的值;未初始化或初始化为0的变量存放在静态非初始化区。

 

编译器通常会建一个符号表,里面描述变量的各属性。语法检查与代码生成的时候访问并回填数据。

 

OS或者编译器怎么识别是全局变量还是局部变量

 

操作系统不识别。那是编译的时候写死的,运行的时候只管跑。
编译器解析文本结构,获得你写的代码的各种信息。文本结构的解析方法详见编译原理。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值