美文网首页
寄存器变量

寄存器变量

作者: VincentHK | 来源:发表于2017-08-07 17:23 被阅读0次

变量一般情况下都存在于内存中。如果程序需要使用某个变量,CPU的控制器将从内存中取得变量值后会将其暂存在寄存器中。寄存器就是CPU自己的"小内存",它的特点是"容量小、速度快"。正常情况下,编程语言本身无法直接操作寄存器。但某些时候,一些变量可能会被频繁地使用,这时,频繁地对内存进行存取操作就会耗费较多的时间;如果我们能够有效地利用CPU的寄存器,就会显著提升程序的运行效率。

 C语言中使用关键字register来声明局部变量为寄存器变量。寄存器变量的值会被存放在CPU的寄存器中,每当需要使用它们时,CPU就可以直接使用,而无须再通过控制器从内存中获取。由于操作寄存器的速度远高于操作内存,所以正确地使用寄存器变量能够有效地提高程序运行效率。register型变量常被用于作为循环控制变量,这能充分体现它的高速特点。

但是,我们必须明确只有局部自动变量和形式参数才能够被定义为寄存器变量,全局变量和局部静态变量都不能被定义为寄存器变量。而且,一个计算机中寄存器数量是有限的,一般为2到3个,因此寄存器变量的数量不能太多。对于在一个函数中说明的多于2到3个的寄存器变量,C编译程序会自动地将寄存器变量变为自动变量。 受硬件寄存器长度的限制,寄存器变量只能是char、int或指针型,而不能使其他复杂数据类型。由于register变量使用的是硬件CPU中的寄存器,寄存器变量无地址,所以不能使用取地址运算符"&"求寄存器变量的地址。

以下为一个寄存器变量的声明:

register int variable;

相关文章

  • 程序员自我修养之逆向工程开发学习中

    一、dalvik字节码学习 1. 寄存器的命名 v: 局部变量寄存器,v0-vn , 变量寄存器:...

  • 函数栈帧以及调用约定相关的一些总结

    局部变量1--->Ebp-4 局部变量开始原始ebp寄存器值--->Ebp +0 原始ebp寄存器值返回地址--...

  • unix 第七章

    自动变量,寄存器变量,易失变量 volatile setjmp 和 longjmp函数 易失变量容易被改变 所以每...

  • 编写高性能的Lua代码

    只要实战不说废话 变量 因为 Lua 的寄存器很多,预编译时便能将所有的局部变量存到寄存器中。所以,在 Lua 中...

  • 寄存器变量

    变量一般情况下都存在于内存中。如果程序需要使用某个变量,CPU的控制器将从内存中取得变量值后会将其暂存在寄存器中。...

  • 静态变量 寄存器变量

    静态变量 静态变量 存储在静态内存区,而不是程序运行期间生产的顶端的堆和栈区(一级二级三级缓存区和高级虚拟内存区等...

  • smali 变量

    基础 Android 的变量都存储于寄存器中。变量分为 v 与 p 两种格式 v 变量表示方法中非参数变量。 p ...

  • 变量的静态存储与动态存储

    首先,静态存储与动态存储都是变量在内存中的存储方式。 C语言中变量分为局部变量(auto)、寄存器变量(regis...

  • arm汇编学习笔记

    Arm32 基本寄存器:R0-R3 作为 参数寄存器R4-R11 作为 局部变量寄存器R12 作为 内部调用暂时寄...

  • Android 虚拟机与类加载机制

    1.虚拟机 JVM与Dalvik 基于寄存器:基于虚拟寄存器来进行操作,虚拟寄存器相当于操作数栈与局部变量表。基于...

网友评论

      本文标题:寄存器变量

      本文链接:https://www.haomeiwen.com/subject/mlpalxtx.html