次のプログラムの Loop2 は、Loop1 よりも時間がかかると予想していました。しかし、最適化 (gcc -O2) を有効にした後でも、両方のループにほぼ同じ時間がかかることがわかります。私のシステムで sizeof(int)=4 と sizeof(short)=2 を使用しているのはなぜですか? 私は、コンパイラが short を乗算するための短い乗算命令を配置し、したがって時間を短縮することを期待していました。
#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);
}