Я ожидал, что Loop2 в следующей программе займет больше времени по сравнению с Loop1. Но даже после включения оптимизации (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);
}
shorts будут быстрее? - person Jonathan Wood   schedule 21.12.2012imulзаймет больше времени, чем 2-байтовый на современном процессоре? - person AShelly   schedule 21.12.2012