寄存器变量的存储类别

cpu

18人已加入

描述

寄存器是cpu的一部分,是计算机中速度最快的存储器,分为 通用寄存器、专用寄存器、段寄存器、其他寄存器,每个寄存器存储一种类型的变量,各司其职,这样说来,又分为累加器、源变址寄存器、基址寄存器、计数寄存器、状态寄存器等等寄存器变量,顾名思义,就是存贮在寄存器里的变量。由于操作寄存器的速度远高于操作内存,但寄存器的数量有限,所以把最频繁使用的数据存储在寄存器里,有效地提高程序运行速率。C语言定义为 register int a;

C语言的变量有4种存储类型,分别是auto(自动型)、static(静态型)、register(寄存器型)和extern(外部型)。在定义或说明一个变量时可以加上存储类型关键字,以限定其存储类别。

存储类型决定了系统将在哪一个数据存储区为变量分配存储空间。auto型将在堆栈区分配存储空间;static型将在静态数据区分配存储空间;register型将在CPU内部的寄存器中分配存储空间;而extern将不为变量分配存储空间,extern声明该变量在别的地方已经分配了存储空间。

变量存储类型关键字只需加在变量定义语句类型关键字前面即可。

char ch1;/*定义了一个char型变量ch1,其存储类型默认为自动型(必须是内部变量)*/

static char ch2;/*定义了一个char型变量ch2,其存储类型指定为静态型*/

注意:以上auto型是对内部变量而言,对于外部变量不存在自动型的问题。内部变量自动在堆栈区分配空间。事实上,内部变量默认为自动型,所以auto限定词没有任何用处。

变量的存储类别

动态存储与静态存储

从变量的产生时间上可以分为静态存储和动态存储。

静态存储就是指程序运行分配固定的存储方式,而动态存储则是在程序运行期间根据需要动态的分配存储空间。

auto变量

auto关键字就是修饰一个局部变量为自动的,每次执行到定义该变量是都会产生一个新的变量,并对其重新进行初始化。

寄存器

局部变量的默认存储方式就是auto,定义时可以忽略

static变量

static变量为静态变量,将函数内部和外部的变量声明成static的意义是不一致的。

对于局部变量来说,static变量和auto变量是相对而言的。在语句块执行期间,static变量将始终保持他的值(地址不变),并且初始化操作只在第一次执行时起作用。

寄存器

register变量

register变量称为寄存器存储类变量。使用register的目的是把某个局部变量存放在计算机的某个硬件寄存器而不是内存中。这样的好处是可以提高程序的运行速度,不过这只是反映了程序员的主观意愿,实际上编辑器可以忽略register对变量的修饰。

用户无法获得寄存器变量的地址,因为绝大多数计算机的硬件寄存器都不占用内存地址。而且即时编译器忽略了register而把变量存放在可设定的内存中,也是无法获取变量的地址的。

如果想要有效的利用寄存器register关键字,必须向汇编语言程序员那样了解处理器的内部结构,知道可用于存放变量的寄存器数量,种类以及工作方式。但是,在不同的计算机对于这些细节可能是不同的,因此,对于一个要具备可移植的程序来说,register的作用并不大/

extern变量

extern变量称为外部存储变量.extern声明了程序中将要用到但尚未定义的外部变量。通常,外部存储类都用于声明在另一个转换单元中定义的常量。

一个工程是由多个C文件组成的。这些源代码文件分别编译,然后链接成一个可执行模块。把这样的一个程序作为一个工程进行管理,并且生成一个工程文件来记录所包含的所有源代码文件

寄存器

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分