
■1.要するに安近短が百倍早いらしい
for(x;for(yと
for(y;for(xの処理速度を比較してみました。
■2.for(x;for(y対for(y;for(x
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <assert.h>
#define XMAX 0x1000
#define YMAX 0x2000
char 配列A[XMAX][YMAX];
void xy(void){
for(int x = 0;x < XMAX ;x++){
for(int y = 0;y < YMAX;y++){
配列A[x][y] = 'Q';
}
}
}
char 配列B[XMAX][YMAX];
void yx(void){
for(int y = 0;y < YMAX ;y++){
for(int x = 0;x < XMAX ;x++){
配列B[x][y] = 'Q';
}
}
}
typedef void (*関数ポインタ_型)(void);
static inline void 時間計測(
char *title,
関数ポインタ_型 計測対象関数
){
clock_t start = clock();
for(int i = 0;i < 0x10; i++){
計測対象関数() ;
}
clock_t end = clock();
printf("%s\t%10ld clock\n",title, end - start);
}
int main(void){
時間計測("xy",xy);
時間計測("yx",yx);
}
やっている事はどちらも
2次元配列を文字’Q’で初期化です。
違いはforループの順番です。
■3.実験結果
+ gcc -Wall -Wextra vs.c -O2
+ ./a.out
xy 62500 clock
yx 9046875 clock
筆者の環境下では
物凄く処理速度が違います。
ざっくり150倍違いました。