C/C++中的寄存器变量

转载 2014年08月31日 11:24:44

       在程序运行时,根据需要到内存中相应的存储单元中调用,如果一个变量在程序中频繁使用,例如循环变量,那么,系统就必须多次访问内存中的该单元,影响程序的执行效率。因此,C\C++语言还定义了一种变量,不是保存在内存上,而是直接存储在CPU中的寄存器中,这种变量称为寄存器变量.

      ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

寄存器变量的定义形式是:

register 类型标识符 变量名

寄存器是与机器硬件密切相关的,不同类型的计算机,寄存器的数目是不一样的,通常为2到3个,对于在一个函数中说明的多于2到3个的寄存器变量,C编译程序会自动地将寄存器变量变为自动变量。

由于受硬件寄存器长度的限制,所以寄存器变量只能是char、int或指针型。寄存器说明符只能用于说明函数中的变量和函数中的形参,因此不允许将外部变量或静态变量说明为"register"。

register型变量常用于作为循环控制变量,这是使用它的高速特点的最佳场合。比较下面两个程序的运算速度。

/* 程序1 */

main ( )

{

register int temp, i;

for ( i=0; i<=30000; i++ )

for ( temp=0; temp<=100; temp++ ) ;

printf ("ok\n");

}

/* 程序2 */

#include

main( )

{

int temp, i;

for ( i=0; i<=30000; i++ )

for ( temp=0; temp<=100; temp++ ) ;

printf ("ok\n");

}

这两个程序中,前者使用了两个寄存器变量,后者使用了两个自动变量程序除此之外完全一样。但运行时感觉的执行速度是不同的,前者使用寄存器变量的程序要比后者使用自动变量的程序要快。(如果在Tubro C的环境下运行程序2,则应该将编译器优化选项"use register variable"开关关上(OFF),否则,编译器自动优化程序使用寄存器,两个程序会得到相同的结果。)

由于register变量使用的是硬件CPU中的寄存器,寄存器变量无地址,所以不能使用取地址运算符"&"求寄存器变量的地址。

(quoted from internet)

C++变量的存储类别(动态存储、静态存储、自动变量、寄存器变量)

一、动态存储方式与静态存储方式 上一节已介绍了变量的一种属性——作用域,作用域是从空间的角度来分析的,分为全局变量和局部变量。 变量还有另一种属性——存储期(storage duration,也称...

C++各个寄存器的作用

ECX 是计数器(counter), 但是在C++类函数的执行过程中,用来存放this指针。 EIP 寄存器存放下一个CPU指令存放的内存地址,当CPU执行完当前的指令后,从EIP寄存器中读取下一条指...

C++变量的存储类别(动态存储、静态存储、自动变量、寄存器变量、外部变量)

动态存储方式与静态存储方式 我们已经了解了变量的作用域。作用域是从空间的角度来分析的,分为全局变量和局部变量。 变量还有另一种属性——存储期(storage duration,也称生命期)...

浅析c语言中的变量(局部变量,外部变量,静态变量,寄存器变量)

c语言中变量分为四类,分别是1.auto   自动变量2.static   静态存贮分配变量(又分为内部静态和外部静态)3.extern  全程变量(用于外部变量说明)4.register  寄存器变...
  • qmhlan
  • qmhlan
  • 2011年07月24日 14:25
  • 10702

C语言寄存器变量register

用register声明的变量是寄存器变量,是存放在CPU的寄存器里的。而我们平时声明的变量是存放在内存中的。虽说内存的速度已经很快了,不过跟寄存器比起来还是差得远。 寄存器变量和普通变量比起来...

register 寄存器变量

之前竟然没听过c语言还有寄存器,好可怜,我是小白请见谅,哈哈 简单总结了几条关于register变量应该知道的东西,如下: 1.寄存器变量可以用来优化加速c语言程序 2.声名只需在类型前多加re...
  • hyqsong
  • hyqsong
  • 2015年07月05日 22:28
  • 1074

C语言变量生存周期

C语言变量在整个程序中的生命周期
  • essity
  • essity
  • 2015年12月16日 18:17
  • 1520

寄存器变量

本文摘自:http://blog.csdn.net/goodlixueyong/article/details/6013601 变量一般情况下都存在于内存中。如果程序需要使用某个变量,CPU...
  • bird67
  • bird67
  • 2016年07月12日 11:46
  • 890

VS 中生成 EXE 时,修改图标一直没有改动的问题

VS 中生成 EXE 时,修改图标一直没有改动的问题   情景:今天用MFC 写了一个简单的东西,最后自己拖动一个 ICON 到资源里去,然后把ID 改成100(已经最小了), 但是怎么在资源管理...

Linux监控程序-----程序自动重启方法

1、使用脚本实现自动重启 首先想到的最简单的使用shell脚本,大概思路: ps -ef | grep “$1″ | grep -v “grep” | wc –l 是获取 $1 ($1 代表进程的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C/C++中的寄存器变量
举报原因:
原因补充:

(最多只允许输入30个字)