C++存储数据的四种方案:自动存储、静态存储、动态存储、线程存储

【转载自 C++prime 第六版】

C++(自C++11起)使用四种不同的方案来存储数据,这些方案的区别就在于数据保留在内存中的时间。

1. 自动存储: 在函数定义中声明的变量(包括函数参数)的存储持续性为自动的。它们在程序开始执行所属的函数或代码块时被创建,在执行完函数或代码块时,它们使用的内存被释放。C++有两种存储持续性为自动的变量。

2. 静态存储: 在函数定义外 被定义的变量 和 使用关键字static 定义的变量。它们在程序整个运行过程中都存在。C++有3种存储持续性为静态的变量。

C++为静态存储持续性变量(静态变量)提供了3种链接性:外部链接性(可在其他文件中访问)、内部链接性(只能在当前文件中访问)和无链接性(只能在当前函数或代码块中访问)。这3种链接性都在整个程序执行期间存在,与自动变量相比,它们的寿命更长。如果没有显示的初始化变量,默认情况下,静态 数组、结构的每个元素或成员都被设置为0.

int  global = 100; //static duration,外部链接性
static int in_file = 10;  //static duration, 内部链接性
int main(){
    static int count = 1; // static duration,无链接性
    ……
}

 

3. 动态存储: 用new运算符分配的内存将一直存在,直到使用delete运算符将其释放或程序结束为止。这种内存的持续性为动态,有时被称为自由存储(free store) 或 堆(heap)。

4. 线程存储(C++11):当前,多核处理器很常见,这些CPU可同时处理多个执行任务。这让程序能够将计算放在可并行处理的不同线程中。如果变量是使用关键字thread_local声明的,则其生命周期与所属的线程一样长。 

posted @ 2020-12-14 21:07  zeroPatrick  阅读(1601)  评论(0编辑  收藏  举报