[c语言】简单的static修饰

用static语句用来修饰 局部变量全局变量 和 函数

1、static修饰局部变量

static修饰 局部变量,便将该变量定义为 静态局部变量,并将其储存在 静态区

 (1)栈区、堆区 和 静态区

  • 静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;
  • 全局数据区可分为三部分:栈区、堆区、静态区
  • 栈区:存放函数的参数值、局部变量等,由编译器自动分配和释放,通常在函数执行完后就释放了,其操作方式类似于数据结构中的栈。栈内存分配运算内置于CPU的指令集,效率很高,但是分配的内存量有限。
  • 堆区:就是通过new、malloc、realloc分配的内存块,编译器不会负责它们的释放工作,需要用程序区释放。分配方式类似于数据结构中的链表。“内存泄漏 ”通常说的就是堆区。
  • 静态区:全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后,由系统释放。

(2)区别

  • 栈区内存由系统自动分配,函数结束时释放。
  • 栈区是一块连续的内存的区域,速度较快,效率较高。
  • 栈区存放的是 局部变量,基础数据类型的值以及基础数据的引用。 

  • 堆区内存由程序员自己申请,并指明大小。

  • 堆区是是不连续的内存区域,动态分配空间,存储空间大一些,可以说是动态内存管理。

  • 指针本身存在调用栈中,而指针指的数据在堆中。


  • 在静态区中全局变量和静态变量被分配到这一块内存中。

  • 在静态区的变量出其作用域并不会被销毁,而是整个程序结束后才被削会。

(3) 

 [c语言】简单的static修饰_第1张图片

 

  • 这里是整形变量b未被static 修饰的结果:1 1 1 1 1 1 1 1 1 1 1。
  • 每一次随函数的开始而开始,一旦函数结束,那么,变量b 中的数据也会被销毁。
  • 而一旦用static修饰变量b,那么,变量b 中的数据就不会被销毁,会被保留在静态区中。

[c语言】简单的static修饰_第2张图片 

  •  而其保留的值会被输入while语句中去执行,其结果:1 2 3 4 5 6 7 8 9 10 11 

 

2、本质上是static开辟了一块静态区储存区域,将变量转移至静态区,扩大其作用域 

相当于一个全局变量(具有了全局变量的属性)

static影响了变量的生命周期。 

你可能感兴趣的:(java,jvm,开发语言)