美文网首页
储存持续性、作用域和链接

储存持续性、作用域和链接

作者: k莫失莫忘 | 来源:发表于2019-08-22 09:08 被阅读0次

0. C++11四种存储数据方法:

  1. 自动储存持续性
    在函数定义中声明的变量
  2. 静态储存持续性
    在函数定义外声明的变量
    使用关键字static定义的变量
  3. 线程储存持续性
  4. 动态储存持续性
    使用new分配的内存

1. 自动储存持续性

在函数中声明的函数参数和变量。
储存性为自动,作用域为局部,没有链接性。

auto关键字
在C和早期C++中,auto用于显式地指出变量为局部自动变量。


自动变量和栈
程序留出一段内存,称为栈,管理自动变量的增减。
LIFO(后进先出)


register关键字
早期用于建议编译器使用CPU寄存器来储存自动变量。
C++中,只用来显示地指出变量是自动的(硬件和编译器的发展)。

2. 静态持续变量

3种链接性:
 外部链接性(可在其他文件中访问)--> 在代码块外面声明
 内部链接性(只能在当前文件中访问)--> 在代码块外部声明,并用static限定符
 无链接性 --> 在代码块内部声明,并用static限定符

由于静态变量的数目在程序运行期间是不变的,因此不需要使用特殊装置(如栈)来管理它们。编译器将分配固定的内存块来储存所有的静态变量。

int global = 1000; // static duration, external linkage
static int one_file = 50; // static duration, internal linkage
int main()
{
...
}
void function(int n)
{
  static int count = 0; // static duration, no linkage
}
// static 用于局部声明, 以指出变量是无链接性的静态变量时,
// static表示的是存储连续性;
// 而用于代码块外的声明时,变量已经是静态持续性了,
// static表示内部链接性。
// 有人称为关键字重载,即关键字的含义取决于上下文

静态变量初始化
 1. 默认零初始化
 2. 常量表达式初始化
 3. 动态初始化

const double pi = 4.0 *atan(1.0); // dynamic initialization
//必须要等到atan被链接且被程序执行时初始化

静态持续性、外部链接性
(链接性为外部的变量通常简称为外部变量,它们的储存连续性为静态)

单定义规则:
在多文件程序中,可以在一个文件(且只能在一个文件)中定义一个外部变量。使用该变量的其他文件必须使用关键字extern声明它。


附件:变量存储方式

储存描述 持续性 作用域 链接性 如何声明
自动 自动 代码块 在代码块中
静态,无链接性 静态 代码块 在代码中,使用static
静态,外部链接性 静态 文件 外部 不在任何函数内
静态,内部链接性 静态 文件 内部 不在任何函数内,使用static

相关文章

  • 第九章 内存模型和命名空间

    #ifndef和#endif 自动化储存持续性 静态储存持续性 线性储存持续性 动态储存持续性 作用域和链接 如果...

  • 储存持续性、作用域和链接

    0. C++11四种存储数据方法: 自动储存持续性在函数定义中声明的变量静态储存持续性在函数定义外声明的变量使用关...

  • C++变量存储方式

    C++变量存储方式通过 存储持续性、作用域、链接性 来描述的。 存储持续性 存储持续性 描述变量的生命周期,它可分...

  • 存储类别和内存管理

    概念 作用域:块作用域,函数作用域,文件作用域 链接: 外部链接:多文件中使用内部链接:只在一个翻译单元(文件)内...

  • C++ static 关键字总结

    静态持续变量 类静态数据成员 类静态成员函数 1.存储持续性、作用域和链接性(多个库的链接) 记得再笔记本上试一下...

  • C - 链接属性

    C 变量有 3 种链接属性: 外部链接, 内部链接或无链接. 具有块作用域, 函数作用域或函数原型作用域的变量都是...

  • 前端的那些事(二):作用域与作用域链(词法与块级作用域)

    一、作用域 作用域:能够储存变量当中的值,并且能在之后对这个值进行访问或修改。 1.1 词法作用域 历史:基础的作...

  • 作用域和生命周期

    标识符(identifier)的作用域和链接表明了程序的哪些部分可以使用它。 作用域有俩种: 文件作用域 file...

  • 存储类、链接和内存管理

    CH12 存储类、链接和内存管理 作用域(scope) 代码块作用域(block scope): 包含在开始花括号...

  • 客户端缓存

    localStorage 和 sessionStorage 区别:有效期、作用域不同——数据可以储存多长时间、谁拥...

网友评论

      本文标题:储存持续性、作用域和链接

      本文链接:https://www.haomeiwen.com/subject/rsnbsctx.html