数据的存储方式

 C++11标准新增加了一种存储方式----线程存储。
C++11目前有四种管理数据内存的方式:
  1. 自动存储
  2. 静态存储
  3. 动态存储
  4. 线程存储

  • 自动存储
在函数内部定义的常规变量为自动变量,使用自动存储。自动变量:指在定义它们的时候才创建,在定义它们的函数返回时系统回收变量所占存储空间。对这些变量存储空间的分配和回收是由系统自动完成的。一般情况下,不作专门说明的局部变量,均是自动变量。自动变量也可用关键字auto作出说明。自动变量只有一种存储方式,就是存储在栈中。由于自动变量存储在栈中,所以自动变量的作用域只在函数内,其生命周期也只持续到函数调用的结束。
  1. void f()/**/
  2. {/**/
  3. auto int c=3;/*c为自动变量*/
  4. int x=2;/*x未说明存储类型,则为缺省类型(自动)*/
  5. }/**/
  • 静态存储
静态存储是在整个程序执行期间都存在的储存方式。
静态存储有两种方式:
  1. 全局变量
  2. 局部静态变量
  1. int time = 0;
  2. int fuc(void)
  3. {
  4. static int time1 = 0;
  5. return 0;
  6. }

  • 动态存储
C++ 使用new和delete关键字来声明的和销毁动态变量。因此动态存储比自动存储和静态存储都灵活。new 和delete使程序员对内存哟有了更大的控制权。

  • 线程存储
全局变量与函数内定义的静态变量,是各个线程都可以访问的共享变量。


静态存储区与动态存储区

静态存储区分为:只读数据区,读写数据区,未初始化区,他们都是在程序编译阶段确定的,在程序执行阶段不会改变(运行期间都存在)。主要存储全局变量、静态局部变量、常量。

动态存储区:分为堆和栈。都是程序运行过程中分配的,大小也随之动态变化。






原文地址:https://www.cnblogs.com/chengkeke/p/5417374.html