一、存储连续性
定义:即数据不同的存储方式,决定的数据保留在内存中的时间。分四种:
自动存储:函数参数和函数内声明的变量。函数开始时执行,结束时内存被释放。
静态存储:函数外定义的变量,或用static修饰的变量,在程序运行中都存在。
线程存储:关键字thread_local声明,生命周期同所属线程
动态存储:使用new修饰的,直到delete或程序结束被释放
二、存储的链接性、作用域
定义:即数据在不同文件间的共享能力。
静态存储只有A全局变量能在不同文件共享。其他静态存储类别的作用域,只能是单个翻译单元或所声明的函数内。
自动存储的变量,作用域范围只是代码块内。没有链接性。
详细程序说明:
#include <iostream>
int global = 1000;//A.静态变量,外部链接性,整个文件中可用
extern int GLOBAL_VALUE;
static int one_file = 50;//B.静态变量,内部链接性,整个文件中可用
int main() {
static int count = 0;//C.静态变量,无链接。函数没调用时就在内存里了
int llama = 0;//D.自动变量,只能在代码快内使用,自动释放内存
std::cout << GLOBAL_VALUE;
return 0;
}
void fun1(){
int r = global;
int t = one_file;
}
注意:c++有单定义原则。定义全局变量后,其他文件定义重名的变量会报错,为了防止定义冲突,单个文件内的静态变量用static修饰即可。