控制域和生命周期
生命周期跟控制域是不一样的
static修饰局部变量
static修饰局部变量 原本局部变量是在栈区 经过修饰后变为局部静态变量 储存区发生变化变为静态区 生命周期会和程序生命周期一样 而控制域不变还是只能在那个小地方使用
static修饰全局变量
全局变量虽然控制域和生命周期的范围都是整个程序 但是如果想在程序中的不同文件使用 就需要引用extern去声明
如上图全局变量需在不同文件中使用需用extern声明使用
如果用static修饰全局变量 则全局变量会变为全局静态变量 它只能在自己所在的源文件内使用
static修饰函数
函数能在整个项目中用,但是在不同文件中用就要跟全局变量一样需要声明(全局变量声明要用到extern ,函数用不用extern进行声明都可以 (因为默认有extern))
如果用static修饰函数 (该函数被修饰后效果跟全局变量被修饰后效果一样) 都是只能在该文件上使用
内存的不同部位
局部变量申请内存在栈区 全局变量申请内存在静态区 静态局部变量申请内存在静态区 而静态全局变量也申请在静态区 函数调用时才会在栈区申请内存 静态函数也是调用时才在栈区申请内存 对于其控制域和生命周期 有以下链接
对于函数调用时内存的申请如下(函数内部也会有变量的创建,从而内部会二次开辟空间)