wangc
Oct 10, 2017
存储结构
- 变量的存储结构
属性
- 生存期是执行过程的一个区间,从创建变量开始到销毁释放内存结束。
-
作用域是可以在其中访问这个变量的代码区域。
- 自动存储时间:从声明到代码块结束,重新执行代码块,重新生成,内存在栈空间进行分配。
- 静态存储时间:从程序开始到程序结束。
- 动态存储时间:利用动态内存分配,在空闲存储器上(堆)申请释放空间。
int pstr*( new char[20] );
new char[20]含义为申请一个内存为20个char类型数据的内存空间,并创建第一个元素的地址。然后将指针指向这个地址。
delete [] pstr;
delete对于基本变量先寻找地址,确定内存大小,在回收内存;对于对象,先寻找析构函数析构完成收回内存。注意new对应delete,new[]对应delete[]。
pstr = nullptr;
规范:指针重新初始化。
\n
分类
- 按作用域
- 全局变量:在函数外声明,作用域为声明到主函数结束。(尽量不使用,占内存)
- 局部变量:代码块内声明,作用域为代码块。
-
- 全局变量可以被同名的局部变量所隐藏。
- 按存储方式
- 自动变量:局部变量默认为自动变量,生存期为自动存储时间,需初始化。
- 静态变量:变量声明前加static,全局变量默认为静态变量,生存期为静态存储时间,默认初始值为0。
- 数据内存区域
名称 | 存放 |
---|---|
data area 数据区 | 全局变量,静态数据,常量 |
code area 代码区 | 存放代码 |
stack area 栈区 | 局部变量,返回数据,返回地址 |
heap area 堆区 | 动态内存分配 |
- lvalue和rvalue
- ex1:a = b + c, lvalue = rvalue
- ex2:a++ -> lvalue, ++a -> rvalue
- lvalue:内存中持续存储数据的一个地址。
- rvalue:临时存储的表达式结果。