变量的声明和定义:
声明:
只是指出了变量的名字,方便编译通过。但是并未分配内存空间。
定义:
指出变量名字的同时为变量分配了内存空间。
定义包含声明。声明可以有多次,定义只能有一次。如果声明时进行了初始化,也会被当作定义。分离时编译。
变量分为全局变量,局部变量,常量。全局变量和常量以及静态变量都存储在全局静态存储区。
中间插入一下程序中的存储位置:
一个C/C++程序占用的内存空间:
栈区:局部变量等,自动回收
堆区:new/malloc等,需要手动释放。若不释放,程序结束后由OS回收。
全局静态区:全局变量和静态变量。由系统释放
常量区:由系统释放
代码区:存放函数体的二进制代码
全局变量
分为外部全局变量(extern)/内部全局变量(static)
外部全局变量(extern):
可以被其他文件文件进行访问(作用域为整个工程)的全局变量。全局变量默认是外部全局变量。要在其他文件中使用,必须使用extern进行声明。
内部全局变量(static):
只能在本文件进行访问(作用域为整个文件)的全局变量。
全局变量存储在静态区。
static 局部变量:
会延长局部变量的生命周期,执行到static局部变量才会分配内存空间,只有程序结束才会释放空间。
1.应用场景:当某个方法的调用频率很高时,而该方法中有些变量的值是固定的,这时使用static来修饰该局部变量,让该局部变量值开辟一次内存空间,可以提高程序的效率和性能。
static变量只初始化一次。
静态变量为什么只初始化一次?把静态变量地址的下一个地址每次置0,发现就可以多次初始化了。说明该地址存储静态变量初始化的标志位。初始化过了,该标志位就置1。
外部函数:extern 可以被其他文件访问的函数
内部函数:static 只能在当前文件进行访问的函数