为了程序运行的效率,有些频繁修改的变量将会被直接存储在寄存器中而不是内存,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修饰符都将被编译程序所忽略。