存储类别、链接和内存管理
概念
-
对象:一块存储数据的内存
-
存储期:对象在内存中保留了多长时间
-
翻译单元:源代码文件和头文件可以看成一个包含信息的单独文件,即翻译单元
作用域
描述程序的哪些部分能使用变量
链接
无文件作用域的变量都是无链接变量
外部链接变量可以在多文件程序中使用,内部链接变量只能在一个翻译单元使用。(都具有文件作用域)
存储期
静态存储期
static 静态变量:在程序执行期间一直存在,即离开变量所在函数后,变量不会消失。
- 在函数中声明的静态变量具有块作用域
- 在函数外声明的静态变量具有文件作用域
ps:如果未初始化,静态变量将会被设置为0
文件作用域变量都具有静态存储期。()
static int stay = 1; //内部链接
int traveler = 1; //外部链接
存储类别说明符
名称 | 类别 | 作用域 | 链接 | 内存分配 |
---|---|---|---|---|
auto | 自动变量 | 块作用域 | 无 | 程序运行的所在块时 |
register | 寄存器变量 | 块作用域 | 无 | 同上 |
static | 内部链接1 | 文件作用域或块作用域 | 内部链接 | 程序编译时初始化 |
extern | 外部链接2 | 文件作用域 | 外部链接 | 同上 |
_Thread_local | ||||
typedef |
此处为瞎起的名,不要介意:happy:
多文件
如果外部变量被定义在一个文件中,其他文件在使用该变量之前必须用extern声明它
restrict
用于指针,报名该指针是访问数据对象的唯一且初始的方式
volatile
代理可以改变该变量的值
volatile int locl; //易变的位置
volatile int * polc; //指向易变位置的指针