C++11标准新增加了一种存储方式----线程存储。
C++11目前有四种管理数据内存的方式:
- 自动存储
- 静态存储
- 动态存储
- 线程存储
- 自动存储
在函数内部定义的常规变量为自动变量,使用自动存储。自动变量:指在定义它们的时候才创建,在定义它们的函数返回时系统回收变量所占存储空间。对这些变量存储空间的分配和回收是由系统自动完成的。一般情况下,不作专门说明的局部变量,均是自动变量。自动变量也可用关键字auto作出说明。自动变量只有一种存储方式,就是存储在栈中。由于自动变量存储在栈中,所以自动变量的作用域只在函数内,其生命周期也只持续到函数调用的结束。
void f()/**/
{/**/
auto int c=3;/*c为自动变量*/
int x=2;/*x未说明存储类型,则为缺省类型(自动)*/
}/**/
- 静态存储
静态存储是在整个程序执行期间都存在的储存方式。
静态存储有两种方式:
- 全局变量
- 局部静态变量
int time = 0;
int fuc(void)
{
static int time1 = 0;
return 0;
}
- 动态存储
C++ 使用new和delete关键字来声明的和销毁动态变量。因此动态存储比自动存储和静态存储都灵活。new 和delete使程序员对内存哟有了更大的控制权。
- 线程存储
全局变量与函数内定义的静态变量,是各个线程都可以访问的共享变量。
静态存储区与动态存储区
静态存储区分为:只读数据区,读写数据区,未初始化区,他们都是在程序编译阶段确定的,在程序执行阶段不会改变(运行期间都存在)。主要存储全局变量、静态局部变量、常量。
动态存储区:分为堆和栈。都是程序运行过程中分配的,大小也随之动态变化。
时间: 2024-10-14 00:24:45