## 一.程序内存存储结构
| 存储区 | 生命周期 |
| ---- | ---- |
| 堆区 *heap* | 动态生命期 |
| 栈区 *stack* | 局部生命期 |
| 数据区 *data* | 静态生命期 |
| 代码区 *code* | 静态生命期 |
## 二.生命周期简介
1. 静态生命期
+ **时间** [长]整个程序运行期。
+ **时机** 预编译时期。
+ **对象** 全局变量,静态全局变量,静态局部变量,const常变量,函数。
+ **存储** 数据区/代码区。
+ **初值** 变量若不作显式初始化,C++编译器会自动将其初始化成(相应类型的)0。
2. 局部生命期
+ **时间** [短]起始于声明点,结束于作用域结束处。
+ **时机** 编译时期。
+ **对象** 局部变量。
+ **存储** 栈区。
+ **初值** 若不作初始化,其值不确定。
3. 动态生命期
+ **时间** [短]由程序员自行干预。
+ **时机** 运行时期。
+ **对象** 程序员手动分配的空间。
+ **存储** 堆区。
+ **初值** 若不作初始化,其值不确定。
## 三.存储类型
1. **auto**
+ 定义:自动申请和释放内存的变量,变量不会自动初始化
+ 作用域:语句块内
+ 存储位置:一般为内存的栈区
+ 生存周期:语句块内
+ **局部变量的默认存储类型为auto**
2. **static**
+ 作用域
+ 静态局部变量:语句块内
+ 静态全局变量:定义它的文件内,定义点->文件结尾
+ 存储位置:内存的数据区
+ 生存周期:整个程序的运行期
+ **没有显式初始化的静态变量在编译阶段自动初始化为0**。
3. **register**
+ **优点** 执行速度快
+ 定义的变量存储于CPU的寄存器。
+ 不能用register定义数组。
+ 除存储位置不同外,其余与auto基本相同。
+ 现代编译器能够自动优化程序,把普通变量优化为寄存器变量,并且可以忽略用户的register指定,一般情况无需特别声明变量为register。
4. **extern**
+ 使用extern关键字引用一个已存在的变量(或函数)。
>[info]extern用于声明,其余关键字用于定义。
## 四.延长生命期的方法
1. 引用一个右值,会延长右值的生命期,使得右值的生命期与引用的生命期相同。
- 阅读说明
- 1.1 概述
- C++基础
- 1.2 变量与常量
- 1.2.1 变量
- 1.2.2 字面值常量
- 字符型常量
- 数值型常量
- 1.2.3 cv限定符
- 1.3 作用域
- 1.3.1 标识符
- 1.3.2 *命名空间
- 1.3.3 作用域
- 1.3.4 可见性
- 1.4 数据类型
- 1.4.1 概述
- 1.4.2 处理类型
- 类型别名
- * auto说明符
- * decltype说明符
- 1.4.3 数组
- 1.4.4 指针
- 1.4.5 引用
- 1.5 表达式
- 1.5.1 概述
- 1.5.2 值的类别
- 1.5.3 *初始化
- 1.5.4 运算符
- 算术运算符
- 逻辑和关系运算符
- 赋值运算符
- 递增递减运算符
- 成员访问运算符
- 位运算符
- 其他运算符
- 1.5.5 *常量表达式
- 1.5.6 类型转换
- 第2章 面向过程编程
- 2.1 流程语句
- 2.1.1 条件语句
- 2.1.2 循环语句
- 2.1.3 跳转语句
- 2.1.4 *异常处理
- 2.2 函数
- 2.2.1 概述
- 2.2.2 函数参数
- 2.2.3 内置函数
- 2.2.4 函数重载
- 2.2.5 * 匿名函数
- 2.3 存储和生命期
- 2.3.1 生命周期与存储区域
- 2.3.2 动态内存
- 2.4 *预处理命令
- 第3章 面向对象编程
- 3.1 概述
- 3.2 类和对象
- 3.3 成员
- 3.3.1 访问限制
- 3.3.2 常成员
- 3.3.3 静态成员
- 3.3.4 成员指针
- 3.3.5 this指针
- 3.4 特殊的成员函数
- 3.4.1 概述
- 3.4.2 构造函数
- 3.4.3 析构函数
- 3.4.4 拷贝语义
- 3.4.5 * 移动语义
- 3.5 友元
- 3.6 运算符重载与类型转换
- 3.6.1 概述
- 3.6.2 重载方法
- 3.6.3 类型转换
- 3.7 继承与多态性
- 3.7.1 概述
- 3.7.2 派生类
- 3.7.3 子类型
- 3.7.4 虚基类
- 3.7.5 虚函数
- 3.7.6 抽象类
- 3.8 模板与泛型
- 3.8.1 概述
- 3.8.2 模板类型
- 3.8.3 *模板参数
- 3.8.4 *模板编译
- 3.8.5 *模板推断
- 3.8.6 *实例化与特例化
- 第4章 C++标准库
- 4.1 概述
- 4.2 输入输出流
- 4.2.1 概述
- 4.2.2 *流的状态
- 4.2.3 *常用流
- 4.2.4 *格式化I/O
- 4.2.5 *低级I/O
- 4.2.6 *随机访问
- 4.3 *C输入输出
- 4.3.1 *字符输入输出
- 4.3.2 *格式化输入输出
- 4.4 * 容器
- 4.4.1 * 概述
- 4.4.2 * 基本操作
- 4.4.3 * 顺序容器
- 4.4.4 * 迭代器
- 4.4.5 * 容器适配器
- 4.5 * 泛型算法
- 4.6 * 内存管理
- 4.6.1 * 自动指针
- 4.7 * 其他设施