局部变量和全局变量有什么区别,
操作系统或编译器是如何识别的.
24 个解决方案
#1
我的理解应该是根据变量的存储位置而定,比如:堆栈、静态内存、堆。
这个还是看看编译原理就清楚了,我下了那本经典的龙书结果看的人很累,太难了!
这个还是看看编译原理就清楚了,我下了那本经典的龙书结果看的人很累,太难了!
#2
生命周期不一样
就像LS说得,存储的地方不一样
个人见解
就像LS说得,存储的地方不一样
个人见解
#3
操作系统或编译器识别应该根据代码块的“{”和“}”判断吧。
#4
变量
定义的位置决定了它是全局变量还是局部变量。只要是定义在函数体内的变量,就是局部变量。函数体外定义的就是全局变量。
#5
操作系统内根本不关心你是什么变量,它只管代理运行程序,也就是进程,负责这些进程之间的调度,不过如果要说操作系统本身也是进程,那倒可以理解;
编译器最终会把程序编译成可执行文件,就是对应的一条一条汇编指令,在程序运行过程中按照定义,就可以有不同的寻址方式,这个就是汇编的内容了,其实不同类型的变量就是寻址方式的不同,说到底还是存储位置不同。
编译器最终会把程序编译成可执行文件,就是对应的一条一条汇编指令,在程序运行过程中按照定义,就可以有不同的寻址方式,这个就是汇编的内容了,其实不同类型的变量就是寻址方式的不同,说到底还是存储位置不同。
#6
操作系统也需要识别全局变量??
#7
顶
#8
++
#9
问:
局部变量和全局变量有什么区别,
============================
1.生存周期不同
2.作用域不同
3.编译器会保证全局变量的初始化,局部变量不作保证
操作系统或编译器是如何识别的.
============================
操作系统不识别。
编译器在语义检查的时候识别,具体怎识别,参考《编译原理》
#10
操作系统也要识别???他知道区!
#11
同意
#12
OS根本就不知道变量是什么东东。
#13
sp........
这个,关操作系统啥事儿?
#14
操作系统还不管你这些问题呢,人家管的是大事好不好
#15
变量是语言层次上的东西 方便人控制的
编译器根据变量定义位置确定是全局 还是局部
全局变量的数据 编译器会分配在堆(heap)上
局部变量的数据 则是运行时在栈(stack)上创建
操作系统负责按照编译器事先分配的地址把程序加载到内存
编译器根据变量定义位置确定是全局 还是局部
全局变量的数据 编译器会分配在堆(heap)上
局部变量的数据 则是运行时在栈(stack)上创建
操作系统负责按照编译器事先分配的地址把程序加载到内存
#16
识别是编译器的时,生成目标文件后,目标文件里有数据区,里面会记录类型的,
在链接生成可执行文件时会分配实际内存,根据变量的类型分为堆和栈。
#17
操作系统加载可执行文件,为全局变量分配了一个特定的内存区域,全局变量程序运行期间内有效。而局部变量总是在每次函数调用期间从堆栈上分配,函数返回后失效。
#18
全局变量怎么会分配在堆上??!!
全局变量与局部静态变量存放位置相同,都放在静态存储区。初始化过的变量存放在静态初始化区,编译时编译器会初始化这部分区域的值;未初始化或初始化为0的变量存放在静态非初始化区。
#19
另外,操作系统只分静态变量和自动变量,变量作用域是编译器规定的
#20
不是根据位置,编译器通常会建一个符号表,里面描述变量的各属性。语法检查与代码生成的时候访问并回填数据
#21
顶
#22
全局变量在 静态存储区中
局部变量在 栈中
局部变量在 栈中
#23
+1
#24
lz还是找本理论的书系统的学习下把,就有概念了
#1
我的理解应该是根据变量的存储位置而定,比如:堆栈、静态内存、堆。
这个还是看看编译原理就清楚了,我下了那本经典的龙书结果看的人很累,太难了!
这个还是看看编译原理就清楚了,我下了那本经典的龙书结果看的人很累,太难了!
#2
生命周期不一样
就像LS说得,存储的地方不一样
个人见解
就像LS说得,存储的地方不一样
个人见解
#3
操作系统或编译器识别应该根据代码块的“{”和“}”判断吧。
#4
变量
定义的位置决定了它是全局变量还是局部变量。只要是定义在函数体内的变量,就是局部变量。函数体外定义的就是全局变量。
#5
操作系统内根本不关心你是什么变量,它只管代理运行程序,也就是进程,负责这些进程之间的调度,不过如果要说操作系统本身也是进程,那倒可以理解;
编译器最终会把程序编译成可执行文件,就是对应的一条一条汇编指令,在程序运行过程中按照定义,就可以有不同的寻址方式,这个就是汇编的内容了,其实不同类型的变量就是寻址方式的不同,说到底还是存储位置不同。
编译器最终会把程序编译成可执行文件,就是对应的一条一条汇编指令,在程序运行过程中按照定义,就可以有不同的寻址方式,这个就是汇编的内容了,其实不同类型的变量就是寻址方式的不同,说到底还是存储位置不同。
#6
操作系统也需要识别全局变量??
#7
顶
#8
++
#9
问:
局部变量和全局变量有什么区别,
============================
1.生存周期不同
2.作用域不同
3.编译器会保证全局变量的初始化,局部变量不作保证
操作系统或编译器是如何识别的.
============================
操作系统不识别。
编译器在语义检查的时候识别,具体怎识别,参考《编译原理》
#10
操作系统也要识别???他知道区!
#11
同意
#12
OS根本就不知道变量是什么东东。
#13
sp........
这个,关操作系统啥事儿?
#14
操作系统还不管你这些问题呢,人家管的是大事好不好
#15
变量是语言层次上的东西 方便人控制的
编译器根据变量定义位置确定是全局 还是局部
全局变量的数据 编译器会分配在堆(heap)上
局部变量的数据 则是运行时在栈(stack)上创建
操作系统负责按照编译器事先分配的地址把程序加载到内存
编译器根据变量定义位置确定是全局 还是局部
全局变量的数据 编译器会分配在堆(heap)上
局部变量的数据 则是运行时在栈(stack)上创建
操作系统负责按照编译器事先分配的地址把程序加载到内存
#16
识别是编译器的时,生成目标文件后,目标文件里有数据区,里面会记录类型的,
在链接生成可执行文件时会分配实际内存,根据变量的类型分为堆和栈。
#17
操作系统加载可执行文件,为全局变量分配了一个特定的内存区域,全局变量程序运行期间内有效。而局部变量总是在每次函数调用期间从堆栈上分配,函数返回后失效。
#18
全局变量怎么会分配在堆上??!!
全局变量与局部静态变量存放位置相同,都放在静态存储区。初始化过的变量存放在静态初始化区,编译时编译器会初始化这部分区域的值;未初始化或初始化为0的变量存放在静态非初始化区。
#19
另外,操作系统只分静态变量和自动变量,变量作用域是编译器规定的
#20
不是根据位置,编译器通常会建一个符号表,里面描述变量的各属性。语法检查与代码生成的时候访问并回填数据
#21
顶
#22
全局变量在 静态存储区中
局部变量在 栈中
局部变量在 栈中
#23
+1
#24
lz还是找本理论的书系统的学习下把,就有概念了