http://dixq.net/forum/blog.php?u=493&b=1021
特に処理をしていないんで、ぶっちゃけ参考にならないけどね。
Debugで実行すると後から実行するほうが5%ぐらい早いかな。
正直誤差だと思う。
Releaseでするとポインタ使わないほうが比較にならないほど早いです。
ていうかこのコードだと0.00までしか計れないので。
この速度差は、ポインタを弄らない場合はすっごく最適化されてるってことだと思います。
僕ぐらいの腕だと、高速化のためのポインタを下手に弄らないほうがいいわけですね。
どんなアセンブリが出力されているのかまで見る元気はないぜ。
もう3時だし(^^;)
#include
#include
void goukei(int*, int*);
void goukei_pointer(int*, int*);
int main(void){
clock_t start,end;
int i,j;
int tensu[5]={1,2,3,4,5};
int sum;
start = clock();
for(j = 0;j<10000000;j++){
goukei(&sum,tensu);
}
end = clock();
printf("合計%d\n",sum);
printf("[]アクセス %.2f秒かかりました\n",(double)(end-start)/CLOCKS_PER_SEC);
start = clock();
for(j = 0;j<10000000;j++){
goukei_pointer(&sum,tensu);
}
end = clock();
printf("合計%d\n",sum);
printf("*アクセス %.2f秒かかりました\n",(double)(end-start)/CLOCKS_PER_SEC);
}
//ポインタなし
void goukei(int *x, int* tensu){
int sum=0;
int length = 5;
int i;
for(i=0;i<length;i++){
sum += tensu[i];
}
*x = sum;
}
//ポインタ
void goukei_pointer(int *x,int* tensu)
{
int sum=0;
int *endp = &tensu[5];
int *p = &tensu[0];
while (p < endp) {
sum += *(p++);
}
*x=sum;
}