全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎么知道的?

全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎么知道的?

   
      区别就是作用域的区别,局部变量局部可见,全局变量,所有参与链接的模块都可以通过extern来操作该变量.

局部变量
{
}
内部定义的非静态变量都是局部变量了
全局变量:在函数外部定义的非静态变量就是全局变量了

      操作系统不需要知道谁是局部,谁是全局的。编译器根据变量定义的位置,类型来判断是全局的还是局部的变量
  
 
生命周期,访问范围
数据段,栈
操作系统为什么需要知道?(可执行文件格式 ?)    编译器根据声明的位置
 
全局变量为外部变量,其作用域是从定义点到程序结束..
局部变量就表示局限于某个作用域的变量,它可以在函数内以函数作为作用域,可以在for/while/if语句中,以语句块作为作用域,还可以在namespace中,以命名空间作为作用域.

在操作系统中,全局变量存储在内存的静态存储区域,而局部变量存放在内存的栈区.
 
全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎么知道的?
     全局变量和局部变量的区别是作用域不同,全局变量从定义位置开始到程序结束,而局部变量只限定义的函数内可使用,全局变量在数据段,而局部变量在栈,局部 变量在函数结束时内存空间就被系统收回,所以要返回的数组或字符串不要用局部变量定义.extren和在main()函数外定义的变量都称为全局变量,操 作系统和编译器从定义变量为变量分配内存时,从变量的定义和存储区域来分别局部变量和全局变量.
 
这是编程之基本啊~~,1楼正解!
    全局都放在静态存储区,局部一般临时分配在栈里,生命周期到,自动释放内存!
    去看下函数中的变量,auto,static,extern,register!~~ 
    操作系统和编译器通过内存分配的位置来知道的全局变量分配在全局数据段,并且在程序被运行的时候就被加载。
     编译器通过语法词法的分析,判断出是全局变量还是局部变量。如果是全局变量的话,编译器在将源代码翻译成二进制代码时就为全局变量分配好一个虚拟地址 (windows下0x00400000以上的地址,也就是所说的全局区),所以程序在对全局变量的操作时是对一个硬编码的地址操做。
     局部变量的话,编译时不分配空间,而是以相对于ebp或esp的偏移来表示局部变量的地址,所以局部变量内存是在局部变量所在的函数被调用时才真正分配。 以汇编的角度来看:函数执行时,局部变量在栈中分配,函数调用完毕释放局部变量对应的内存,另外局部变量可以直接分配在寄存器中。

操作系统通过变量的分配地址就可以判断出是局部变量和全局变量。
### 回答1: C语言中的自动变量是在函数或代码块内部定义的变量,它们的生存期仅限于该函数或代码块的执行期间。在函数或代码块执行结束后,系统会自动销毁这些变量。自动变量的作用是简化程序结构,限制变量的作用范围,并减少变量命名冲突的可能性。 ### 回答2: C语言中的自动变量是在函数内部声明的变量,它的生命周期仅限于函数的执行期间。当函数被调用时,自动变量被分配内存空间,并在函数执行完毕后自动释放。 自动变量的主要用途是在函数中临时存储和处理数据。它可以用于临时保存中间结果,进行一系列计算,或者在函数内部进行局部的控制和操作。由于自动变量的作用范围仅限于函数内部,它不会干扰其他函数的执行环境,从而提高了程序的可维护性和可重用性。 自动变量的另一个重要用途是通过传值来传递参数。在函数调用时,将函数参数的值复制给自动变量,函数内部对自动变量的修改不会影响原来的参数值。这种传值方式可以确保函数内部的操作不会影响到外部的数据,提高了程序的安全性和稳定性。 此外,自动变量还可以在函数内部定义临时变量,用于存储临时值或者进行简单的计算。这些临时变量只在函数执行期间存在,可以通过声明不同的自动变量来避免不同函数之间的数据相互干扰。 总之,自动变量在C语言中具有临时存储和处理数据的功能,提高了程序的可维护性、可重用性和安全性。通过传值的方式传递参数,确保了函数内外数据的独立性。同时,自动变量的作用范围局限于函数内部,避免了数据的混淆和冲突。 ### 回答3: 在C语言中,自动变量是在函数内部或代码块中声明的变量。它们的生命周期与函数的执行方式相关联。 自动变量的作用主要体现在以下几个方面: 1. 提供了在函数内部存储临时数据的方式:在函数执行期间,自动变量会被分配到堆栈内存中。这使得在函数执行时可以方便地存储和访问临时数据。一旦函数执行结束,这些变量的内存空间就会被释放。 2. 限制变量的可见性:自动变量的作用域仅限于函数内部或代码块内部。这意味着它们无法在函数外部访问。这种限制可以提高代码的模块化和安全性,避免变量被意外修改。同时,它们也可以在相同作用域中使用相同的变量名,而不会引起冲突。 3. 提高内存的利用效率:由于自动变量的内存分配是在函数执行时发生的,所以只有在需要时才会分配内存空间。这样可以避免不必要的内存浪费,提高内存的利用效率。 4. 简化程序的编写和维护:使用自动变量可以使程序的逻辑更清晰简洁。通过在需要时声明和使用临时变量,可以更容易理解代码的意图和流程。此外,自动变量的生命周期由编译器自动管理,减轻了程序员的负担。 需要注意的是,C语言中的全局变量和静态变量是在程序执行期间一直存在的,与自动变量不同。全局变量的作用域为整个程序,静态变量则具有局部作用域但生命周期较长。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值