概述
变量的生存期
标签(空格分隔): C 双学位高级语言程序设计 C函数
这节课我们要学习以下几个问题:
- 编译器是如何给变量分配内存的?
- 变量的存储类型有哪几种?
- 变量的存储类型决定了什么?
- 自动变量和静态局部变量有什么不同?
编译器是如何区分不同作用域中的同名变量的呢?
编译器将它们分配给了不同的地址,所以能够区分。
程序运行时,编译器是如何为程序分配内存空间的呢?
存储区分类 | 内存数据分类(线性从上到下) |
---|---|
内存低地址端 | |
只读存储区 | 代码区 |
只读存储区 | 常量存储区 |
静态存储区 | |
动态存储区 | 堆 |
动态存储区 | …… |
动态存储区 | 栈 |
内存高地址端 |
变量的存储类型(就是编译器为变量分配内存的方式)决定了变量的生存期。静态存储区中的变量生存期是整个函数,动态存储区中的变量生存期是定义它的语句块
存储区分类 | 功能 |
---|---|
只读存储区 | 存放机器代码和常量等只读数据 |
静态存储区 | 存放全局变量和静态变量(静态——初始化发生在程序编译或链接时,程序运行时不发生) |
动态存储区 | 包括堆和栈,其中,栈用于保存函数调用时的返回地址、函数形参、局部变量等信息(动态)——初始化发生在程序调用和运行时 |
C语言有四种变量存储类型,格式如下
存储类型 数据类型 变量名
C存储类型关键字有
- auto(自动变量)
- static(静态变量)
- extern(外部变量)
- register(寄存器变量)
自动变量是使用最广泛的变量,所以C语言将其定为了缺省类型,就是未声明存储类型时,默认定义变量为auto型;静态变量存储在静态存储区内,,仅仅在程序编译时初始化一次,如果没有定义初始化为何值,便初始化为0.不管是静态局部变量还是静态全局变量,生存期都是整个程序,只是作用域不同而已;外部变量是一种声明方式,如果全局变量想在定义点之前或者其他文件中访问,就需要将变量声明(不是定义)为extern类型,告诉编译器,就像函数的声明一样;寄存器变量是将变量储存在CPU中的寄存器内,这适用于使用频率较高的变量,能使程序更小、执行速度更快,但是现代编译器一般都会自动识别转化合适的变量,使其转为寄存器变量,提高运行速度,所以一般不需要用户自己声明寄存器变量
最后
以上就是可靠咖啡为你收集整理的变量的生存期变量的生存期的全部内容,希望文章能够帮你解决变量的生存期变量的生存期所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复