C语言存储模型
- 描述方法(三个方面)
|
作用域
|
代码块、函数原型
|
|
文件作用域
|
|
|
链接类型
|
外部链接
|
|
内部链接
|
|
|
空链接
|
|
|
存储时期
|
静态存储时期
|
|
动态存储时期
|
作用域强调的是变量的作用范围,即变量是否“可见”;连接类型指的是能否被其他文件所使用;存储时期指的是变量的存储空间的生存周期。
- 变量类型
|
变量存储类型
|
|||
|
作用域
|
链接类型
|
存储时期
|
C语言存储模型
|
|
文件
|
外部
|
静态
|
具有外部链接的静态
|
|
内部(static)
|
具有内部链接的静态
|
||
|
代码块
|
无链接
|
静态(static)
|
空链接静态变量
|
|
动态
|
自动变量
|
||
|
寄存器(性质与自动变量类似,存储在寄存器中)
|
寄存器
|
||
即,具有文件作用域的变量,可以是外部链接和内部链接的,但存储时期都是静态的;具有代码块作用域的变量都是无链接的,但是存储时期可以是动态的,亦可以是静态的。
注:
- 具有外部链接的在其他文件使用前必须以exturn声明
- 具有静态存储期的变量必须使用常量初始化(编译阶段获得值)
- 局部静态变量在非定义的代码块域虽然一直存在,但不可见,不可使用。
全局变量要慎用,原因有两个:
- 命名重复
- 其他函数可能违背意图将其值改变
程序通常把内存分为3个部分:
- 静态变量存储
- 自动变量存储
- 动态分配变量的存储
参考文献:
[1].Prata S. C Primer Plus, 6th Edition[J]. 2014

浙公网安备 33010602011771号