在C语言中static类型的变量的意思其实和它的本意差不多,表示“静态”或者“全局”的意思,用来修饰变量和函数。经static修饰过后的变量或者函数的作用域或者存储域会发生变化,而由static修饰的变量在初始值方面也会表现出static关键字的优势。
C语言中程序的内存分布:
1)正文段 —— CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令;
2)初始化数据段(数据段)—— 在程序中所有赋了初值的全局变量,存放在这里。
3)非初始化数据段(bss段)—— 在程序中没有初始化的全局变量;内核将此段初始化为0。
4)栈 —— 增长方向:自顶向下增长;自动变量以及每次函数调用时所需要保存的信息(返回地址;环境信息)。
5)堆 —— 动态存储区。是向高地址扩展的数据类型,是自下向上的扩展方式。
(此图来源于网络)
static修饰的全局变量
在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。
1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)
2)初始化:未经初始化的全局静态变量会被程序自