9.2 存储持续性、作用域和链接性
介绍过多文件程序后,接下来扩展第4章对内存方案的讨论,即存储类别如何影响信息在文件间的共享。现在读者阅读第4章已经有一段时间了,因此先复习一下有关内存的知识。C++(www.cppentry.com)使用三种(在C++(www.cppentry.com)11中是四种)不同的方案来存储数据,这些方案的区别就在于数据保留在内存中的时间。
自动存储持续性:在函数定义中声明的变量(包括函数参数)的存储持续性为自动的。它们在程序开始执行其所属的函数或代码块时被创建,在执行完函数或代码块时,它们使用的内存被释放。C++(www.cppentry.com)有两种存储持续性为自动的变量。
静态存储持续性:在函数定义外定义的变量和使用关键字static定义的变量的存储持续性都为静态。它们在程序整个运行过程中都存在。C++(www.cppentry.com)有3种存储持续性为静态的变量。
线程存储持续性(C++(www.cppentry.com)11):当前,多核处理器很常见,这些CPU可同时处理多个执行任务。这让程序能够将计算放在可并行处理的不同线程中。如果变量是使用关键字thread_local声明的,则其生命周期与所属的线程一样长。本书不探讨并行编程(www.cppentry.com)。
动态存储持续性:用new运算符分配的内存将一直存在,直到使用delete运算符将其释放或程序结束为止。这种内存的存储持续性为动态,有时被称为自由存储(free store)或堆(heap)。
下面介绍其他内容,包括关于各种变量何时在作用域内或可见(可被程序使用)以及链接性的细节。链接性决定了哪些信息可在文件间共享。