变量的生存期

变量的生存期

标签(空格分隔): C 双学位高级语言程序设计 C函数


这节课我们要学习以下几个问题:

  • 编译器是如何给变量分配内存的?
  • 变量的存储类型有哪几种?
  • 变量的存储类型决定了什么?
  • 自动变量和静态局部变量有什么不同?

编译器是如何区分不同作用域中的同名变量的呢?
编译器将它们分配给了不同的地址,所以能够区分。

程序运行时,编译器是如何为程序分配内存空间的呢?

存储区分类内存数据分类(线性从上到下)
内存低地址端
只读存储区代码区
只读存储区常量存储区
静态存储区
动态存储区
动态存储区……
动态存储区
内存高地址端

变量的存储类型(就是编译器为变量分配内存的方式)决定了变量的生存期。静态存储区中的变量生存期是整个函数,动态存储区中的变量生存期是定义它的语句块

存储区分类功能
只读存储区存放机器代码和常量等只读数据
静态存储区存放全局变量和静态变量(静态——初始化发生在程序编译或链接时,程序运行时不发生
动态存储区包括堆和栈,其中,栈用于保存函数调用时的返回地址、函数形参、局部变量等信息(动态)——初始化发生在程序调用和运行时

C语言有四种变量存储类型,格式如下

    存储类型 数据类型 变量名

C存储类型关键字有

  • auto(自动变量)
  • static(静态变量)
  • extern(外部变量)
  • register(寄存器变量)

自动变量是使用最广泛的变量,所以C语言将其定为了缺省类型,就是未声明存储类型时,默认定义变量为auto型;静态变量存储在静态存储区内,,仅仅在程序编译时初始化一次,如果没有定义初始化为何值,便初始化为0.不管是静态局部变量还是静态全局变量,生存期都是整个程序,只是作用域不同而已;外部变量是一种声明方式,如果全局变量想在定义点之前或者其他文件中访问,就需要将变量声明(不是定义)为extern类型,告诉编译器,就像函数的声明一样;寄存器变量是将变量储存在CPU中的寄存器内,这适用于使用频率较高的变量,能使程序更小、执行速度更快,但是现代编译器一般都会自动识别转化合适的变量,使其转为寄存器变量,提高运行速度,所以一般不需要用户自己声明寄存器变量

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值