精华内容
下载资源
问答
  • 寄存器变量

    2020-09-14 06:08:54
    寄存器变量: 变量一般情况下都存在于内存中。如果程序需要使用某个变量,CPU的控制器将从内存中取得变量值后会将其暂存在寄存器中。寄存器就是CPU自己的"小内存",它的特点是"容量小、速度快"。正常情况下,编程...

    寄存器变量:

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

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

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

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

    register int variable;

    当今的优化编译系统能够识别使用频繁的变量,从而自动地将这些变量放在寄存器中,而不需要程序设计者指定,因此,实际上用register声明变量是不必要的

    展开全文
  • C语言中的变量按存储区域可以分为三种:堆栈中的自动变量,普通内存中得静态变量,硬件寄存器变量。由于寄存器变量直接存放在CPU中,而不在内存中,所以访问速度极快。一般应用于需要大量次数访问的变量。寄存器变量...

    C语言中的变量按存储区域可以分为三种:堆栈中的自动变量,普通内存中得静态变量,硬件寄存器变量。由于寄存器变量直接存放在CPU中,而不在内存中,所以访问速度极快。一般应用于需要大量次数访问的变量。寄存器变量只能存放int ,char和指针类型的数据,而且寄存器变量不能过多的使用,否则反而会降低运算速度。但是我们将数据类型定义为registerint类型难道真的能提高运算速度吗?int main(int argc, const char * argv[])

    {

    register int a=0;//int a=0;

    NSDate *date=[NSDate date];

    for (int i=0; i<2000000; i++)

    {

    printf("%d\n",a);

    }

    NSDate *date1=[NSDate date];

    double x=[date1 timeIntervalSinceDate:date];

    NSLog(@"%f",x);

    return 0;

    }实验发现,将数据定义为register int 并没有对时间照成多少影响。register int a=0;

    2015-01-23 09:35:15.526 Test[2945:303] 7.588779

    int a=0;

    2015-01-23 09:34:39.640 Test[2926:303] 7.146115

    原因是register 并不是一个指令,仅仅是对编译器的一个建议,编译器会根据情况将数据放入寄存器中。所以速度可能并不会差太多,因此除非有特殊需要,否则不必将数据定义为register。

    展开全文
  • C语言寄存器变量

    千次阅读 2019-01-06 11:21:21
    如果直接定义一个变量为寄存器变量,则少了载入等过程自然会快。对于频繁使用的变量可以把它放在寄存器中来提速度。 对于VC编译器会自动优化,即使没有声明寄存器变量,VC也会自动优化。 对于GCC编译器就不会自动...

    寄存器存在于CPU内部,运算速度非常快, 因为内存中的数据必须载入寄存器才能计算。如果直接定义一个变量为寄存器变量,则少了载入等过程自然会快。对于频繁使用的变量可以把它放在寄存器中来提速度。

    对于VC编译器会自动优化,即使没有声明寄存器变量,VC也会自动优化。

    对于GCC编译器就不会自动优化。

    定义一个寄存器变量:

    void main(){
         register int i = 0;
         //&i; //寄存器变量放在cpu中,没有地址, 但是c++中没问题
    }

    接下来,通过gcc编译器来编译下面代码,测试执行速度。 

    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    
    void main4()
    {
        time_t start,end;
        time(&start);//获取当前时间,放在start变量中
    
        //这里用的是gcc的编译器,即这里不会自动优化。
        // 测试如下没有设置寄存器变量,程序运行需要8秒
        //double res = 0.0;//结果
        //long int i = 0;
    
        //定义寄存器变量 ,执行只需要4-5秒,效率高不少。
        register double res = 0.0;
        register long int i = 0;
    
        for (;i<2500000000;i++)
        {
            res += i;
        }
        printf("%f\n",res);
    
        time(&end); //获取当前时间放在end中
    
        printf("%d",(unsigned int)(end - start)); //获取时间差
    }

    通过上面代码可以得出结论,对于频繁使用的变量完全可以给它前面加上关键字register, 定义成寄存器变量。

    最后值得注意下面2点:

    //全局变量最好不要占用寄存器,会影响程序的速度
    register int num = 1000;
    
    //静态变量无法定义为寄存器变量,静态变量存在静态区
    register static double  res = 0.0;

     

    展开全文
  • register 寄存器变量

    2019-05-03 14:26:55
    1.寄存器变量可以用来优化加速c语言程序 2.声名只需在类型前多加register 当对一个变量频繁被读写时,需要反复访问内存,从而花费大量的存取时间。为此,C语言提供了一种变量,即寄存器变量。这种变量存放在CPU...

    1.寄存器变量可以用来优化加速c语言程序

    2.声名只需在类型前多加register 

     

           当对一个变量频繁被读写时,需要反复访问内存,从而花费大量的存取时间。为此,C语言提供了一种变量,即寄存器变量。这种变量存放在CPU的寄存器中,使用时,不需要访问内存,而直接从寄存器中读写,从而提高效率。寄存器变量的说明符是register。对于循环次数较多的循环控制变量及循环体内反复使用的变量均可定义为寄存器变量,而循环计数是应用寄存器变量的最好候选者。

    .      只有局部自动变量和形参才可以定义为寄存器变量。因为寄存器变量属于动态存储方式,凡需要采用静态存储方式的量都不能定义为寄存器变量,包括:模块间全局变量、模块内全局变量、局部static变量。
     

    #include<stdio.h>
    #define re register//寄存器 
    int main(){
    	int n=1000000; 
    	for(re int i=1;i<=n;i++){
    		for(re int j=1;j<=n;j++){
    			
    		} 
    	} 
    	 
    } 

     

    展开全文
  • 寄存器变量:

    2018-07-13 09:24:00
    寄存器变量:在c语言当中可以使用寄存器变量来优化程序的性能,最常见的是在一个函数体当中,将一个常用的变量声明为寄存器变量: register int ra; 如果可能的话,编译器就会为它分配一个单独的寄存器,在整个函数执行...
  • 普通变量与寄存器变量速度对比 寄存器变量速度比普通变量存取速度快。对于C程序,寄存器变量不能取地址,编译器会报错。对于C++程序,可以对寄存器变量进行取址操作,编译器不会报错,但是取出来的地址似乎不是...
  • Turbo C下的寄存器变量

    2020-08-03 05:38:38
    在Turbo C下有种变量叫寄存器变量。使用寄存器的好处是可以提高程序的运行速度!因为减少了寻址时间。
  • register寄存器变量

    2018-03-19 14:05:57
    对register寄存器变量的总结如下: 1.寄存器变量可以用来优化加速c语言程序 2.声名只需在类型前多加register 即可,eg register int quick; (quick 就是一个整形的寄存器变量) 3.register只是一个建议型关键字...
  • c语言寄存器变量

    2016-08-10 13:46:00
    如果直接定义一个变量为寄存器变量,则少了载入等过程自然会快。对于频繁使用的变量可以把它放在寄存器中来提速度。  对于VC编译器会自动优化,即使没有声明寄存器变量,VC也会自动优化。  对于GCC编译器就不会...
  • 「C语言」寄存器变量与内存变量
  • 【C语言】寄存器变量

    2020-01-05 00:27:48
    文章目录1、寄存器变量2、寄存器变量速度测试 1、寄存器变量 在程序运行时,根据需要到内存中相应的存储单元中调用,如果一个变量在程序中频繁使用,例如循环变量,那么,系统就必须多次访问内存中的该单元,影响...
  • 1.java变量存储域java变量的存储区域主要放在以下几个地方:(1)寄存器:可以说是最快的存储区,在C/C++中可以声明寄存器变量,但是在java中不能声明寄存器变量,只是编译器在编译时确定。(2)栈:存放关于基本类型...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,115
精华内容 4,446
关键字:

寄存器变量