与 Loop1 相比,我预计以下程序中的 Loop2 会花费更多时间。但即使在启用优化 (gcc -O2) 之后,我发现这两个循环几乎都需要相同的时间。为什么在我的系统中 sizeof(int)=4 和 sizeof(short)=2 会这样?我期待编译器放置一个简短的乘法指令来乘以短裤,从而缩短时间。
#include <stdio.h>
#include <time.h>
float DiffTime(struct timespec Start,struct timespec Stop);
main ()
{
struct timespec start,stop;
int i;
short a,b,c;
int p,q,r;
a=1;
b=2;
c=3;
p=1;
q=2;
r=3;
clock_gettime (CLOCK_THREAD_CPUTIME_ID, &start);
for(i=0;i<1000000;i++) // Loop1
{
a=b*a;
}
clock_gettime (CLOCK_THREAD_CPUTIME_ID, &stop);
printf("Time taken %11.9fs\n",DiffTime(start,stop));
clock_gettime (CLOCK_THREAD_CPUTIME_ID, &start);
for(i=0;i<1000000;i++) // Loop2
{
p=q*p;
}
clock_gettime (CLOCK_THREAD_CPUTIME_ID, &stop);
printf("Time taken %11.9fs\n",DiffTime(start,stop));
printf("%d,%d\n",a,p);
}
float DiffTime(struct timespec Start,struct timespec Stop)
{
long nTime1,nTime2;
nTime1=Start.tv_sec*1000000000 + Start.tv_nsec ;
nTime2=Stop.tv_sec*1000000000 + Stop.tv_nsec ;
return((float)(nTime2-nTime1)/1000000000);
}