存储类型与标识符的生命期
来源:互联网 发布:ie11不支持js 编辑:程序博客网 时间:2024/05/21 22:31
存储类型(storage class)决定标识符的存储区域,即编译器在不同区域为不同存储类型的标识符分配空间。由于存储区域不同,标识符的生命周期也不同,生命期是指标识符从获得空间到空间被释放之间的时间,标识符只有在生命期中,并且在其自己的作用域中才能被访问。
C++中存储类型说明符有4个:auto、register、static、extern
auto和register修饰的为自动存储类型,static修饰静态存储类型,extern声明外部存储类型。
1.自动存储类型包括自动变量和寄存器变量,
局部变量都是自动变量,生命期开始于块的执行,结束于块的结束,原因是自动变量的空间分配在栈中,块开始执行时系统自动分配空间,块执行结束时系统自动释放空间,因此自动变量的生命和作用域是一致的。
寄存器变量register int i;系统将使用这种说明的变量尽可能保存在寄存器中,以提高程序运行速度。
2.静态存储类型
static声明的变量,根据定义的位置不同,还可以分为局部静态变量和全局静态变量,静态变量均存储于全局数据区,如果程序未显式的给出初始化值,则等效初始化为0,静态变量占有的空间要等到整个程序执行结束时才释放,因此静态变量具有全局生命周期。
局部静态变量是定义在块中的静态变量,编译器在全局数据区为其开辟存储空间,该空间一直知道整个程序结束才释放,局部静态变量具有局部作用域,但却有全局生命期,如果显式给出初始化值,则在该块第一次执行时完成,且只进行一次。
example:auto_static_variable
3.外部存储类型
一个C++程序可以由多个源程序文件组成,多文件程序系统可以通过外部存储类型的变量和函数共享某些数据和操作。(例如,main.cpp include mySort.h)
在一个程序文件中定义的全局变量和函数默认为外部的,即其作用域可以延伸到程序的其他文件中。但其他文件如果想使用这个文件中定义的全局变量和函数,需要使用前extern声明,表示该文件不是在本文件中定义的。外部声明通常放在文件的开头(extern 通常省略)
生命期:
(life time)生命期与存储结构相关,存储区域分为代码区,全局数据区,栈区,自由存储区,相应的,生命期分为静态生命期,局部生命期和动态生命期。
静态生命期指的是标识符从程序开始运行时就存在,切到程序结束时消亡,释放空间。具有静态生命期的标识符放在全局数据区,如全局变量,静态全局变量和局部静态变量。默认初始化为0;
局部生命期:函数内部或块中定义的标识符,生命期始于执行到该函数或块的标识符定义处,结束于函数结束,具有局部生命期的标识符存放在栈中,局部生命期的标识符如果未被初始化,不能引用。
动态生命期:具有动态生命期的标识符存放在自由存储区,由特定的函数调用或运算来创建和释放。new(),malloc()为变量分配存储空间时,变量的生命期开始,delete(),free()释放空间或程序结束时,变量生命结束。
- 存储类型与标识符的生命期
- 3.6 变量存储类型与标识符生命期
- C++变量存储类型与标识符生命期
- C++变量存储类型与标识符生命期
- 存储类型、标识符的生命周期
- 指针的生命期
- 线程的生命期
- DLL的生命期
- Activity的生命期
- IT项目的生命期
- Activity 的生命週期
- Activity 的生命週期
- Fragment的生命周周期
- 线程的生命期问题
- Java知识(标识符、数据的存储和类型)
- Android Service 前台运行与生命期
- 第八章 域与生命期
- 变量的存储方式与生存期
- 最长不下降子序列问题
- 多线程
- 安卓-绑定服务与解绑服务
- 棋牌游戏API接口——大雄游戏
- 关于Handler导包问题
- 存储类型与标识符的生命期
- 最简单实现跨域的方法:使用nginx反向代理
- 插入排序的一种实现方法,欢迎批评指正!
- AngularJs ng-bind-html指令整理
- photoshop第六章:图片效果的制作
- ReadingButton,ImageButton,Button去掉默认的点击效果
- LeetCode | HouseRobber 算法题
- 欢迎使用CSDN-markdown编辑器
- 2009-2015年阅读书籍