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

全局与静态的博弈

作者: 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 关键字修饰,注意不要混淆。

相关文章

  • 全局与静态的博弈

    内存中的程序 只读部分 程序中的代码 程序中的常量 可读写部分 .data: 初始化了的全局变量和静态变量 .bs...

  • C++——静态成员函数与静态成员变量

    静态成员函数与静态成员变量使用static进行定义。 静态成员函数和静态成员变量其实就是全局函数与全局变量。 静态...

  • C++——静态成员函数与静态成员变量

    静态成员函数与静态成员变量使用static进行定义。 静态成员函数和静态成员变量其实就是全局函数与全局变量。 静态...

  • c 静态全局变量

    static 与 全局变量当一个进程的全局变量被声明为static之后,它的中文名叫静态全局变量。静态全局变量和其...

  • Objective-C添加类属性

    先回顾一下静态变量与全局变量的一些知识。 头文件中定义全局变量和静态变量的区别。 源文件中定义全局变量和静态变量的...

  • 全局静态画和动态静态化

    一:全局静态化全局静态化是将一个页面生成静态文件存在某个文件中常用的方法有:1.当前时间与生成的静态文件时间差2....

  • 5、static关键字

    全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局...

  • 菜鸟教程——iOS中static变量和全局、局部变量的区别

    全局变量即外部变量,如果前面再用static修饰就构成了静态的全局变量。 全局变量本身就是静态存储方式,静态全局变...

  • C/C++ 中 static 的用法

    C语言: 1、静态全局变量:1、在全局变量前加上 static 关键字,即为静态全局变量2、静态全局变量在程序的数...

  • 全局变量和静态全局变量的区别

    相同点: 存储区域相同:全局变量和静态全局变量都存放在静态存储区。生命周期相同:全局变量和静态全局变量的都是在程序...

网友评论

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

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