register寄存器变量对程序的影响

为了程序运行的效率,有些频繁修改的变量将会被直接存储在寄存器中而不是内存,register修饰的变量将被存在寄存器中频繁使用,以加快其存储速度。

#include<stdio.h>
#include<sys/time.h>
int main()
{
    struct timeval start,end;

    gettimeofday(&start,NULL);//获取起始时间
    double timeuse;
    /*register */double sum;
    /*register */int j,k;
    for(j=0;j<1000000000;j++)
    for(k=0;k<10;k++)
    sum=sum+1.0;
    gettimeofday(&end,NULL);//获取结束时间

    timeuse=1000000*(end.tv_sec-start.tv_sec)+end.tv_usec-start.tv_usec;
    timeuse/=1000000;//整型的秒和微妙转化成浮点型的秒
    printf("运行时间为:%f\n",timeuse);
    return 0;
    //在我机子里二者运行时间是七倍关系
}

使用register修饰符的几点限制

(1)register变量必须是能被CPU所接受的类型。register变量必须是一个单个的长度小于等于整型的类型。不过,有些机器的寄存器也能存放浮点数。

(2)因为register变量可能不存放在内存中,所以不能用“&”来获取register变量的地址。

(3)只有局部动态变量和形式参数可以作为寄存器变量,其它不行,如静态变量。

(4)由于寄存器的数量有限,不能定义任意多个寄存器变量,而且某些寄存器只能接受特定类型的数据(如指针和浮点数),因此真正起作用的register修饰符的数目和类型都依赖于运行程序的机器,多余的register修饰符都将被编译程序所忽略。


猜你喜欢

转载自blog.csdn.net/dt_zhangshuo/article/details/79118314