变量的生存期
发布日期:2021-08-17 10:08:08 浏览次数:40 分类:技术文章

本文共 959 字,大约阅读时间需要 3 分钟。

变量的生存期

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


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

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

编译器是如何区分不同作用域中的同名变量的呢?

编译器将它们分配给了不同的地址,所以能够区分。

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

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

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

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

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

存储类型 数据类型 变量名

C存储类型关键字有

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

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

转载于:https://www.cnblogs.com/yichuan-sun/p/9624226.html

转载地址:https://blog.csdn.net/weixin_30846599/article/details/99246337 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:分页语句
下一篇:算法--样本方差、样本标准差、方差、标准方差与加权平均

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年03月28日 18时36分48秒