美文网首页
全局与静态的博弈

全局与静态的博弈

作者: FaiChou | 来源:发表于2016-05-07 11:08 被阅读46次

    内存中的程序

    • 只读部分
    • 程序中的代码
    • 程序中的常量
    • 可读写部分
    • .data: 初始化了的全局变量和静态变量
    • .bss(Block Started by Symbo):未初始化的全局变量和静态变量
    • heap: 使用 malloc, realloc, 和 free 函数控制的变量
    • stack: 函数调用时使用栈来保存函数现场,自动变量

    静态变量 & 全局变量

    全局变量:代码中的变量,要么定义在函数外,要么定义在函数里。定义在函数外的变量就有了全局的作用域,成了全局变量,全局变量不仅在整个文件中有作用,而且在其他文件中也有作用,称作链接性

    a.c

    #include <stdio.h>
    
    int a;
    
    int compute(void);
    
    int main()
    { 
      a = 1; 
      printf("%d %d\n", a, compute()); 
      return 0;
    }
    

    b.c

    int a;
    int compute(void)
    { 
      a = 0; 
      return a;
    }
    

    在链接过程中会产生重复定义错误,原因是有两个全局变量a,为了避免这种情况,需要引入static

    静态变量:指使用 static 关键字修饰的变量,static 关键字对变量的作用域进行了限制,使得变量仅在源文件内有效。

    • static在函数外:static全局变量
    • static在函数内:static局部变量

    对于static局部变量,在其他文件调用本文件内函数修改其值时候,变量的值不会丢失;普通局部变量都是重新分配,而静态局部变量保持上次调用的值不变。

    注意:'静态'这个中文翻译实在是有些莫名其妙,给人的感觉像是不可改变的,而实际上 static 跟不可改变没有关系,不可改变的变量使用 const 关键字修饰,注意不要混淆。

    相关文章

      网友评论

          本文标题:全局与静态的博弈

          本文链接:https://www.haomeiwen.com/subject/dxojrttx.html