【C言語】
関数ポインタを使って
2関数の処理速度を
比較する方法

関数ポインタの基本的な使い方

■関数ポインタの使用例

for(x;for(yループと
for(y;for(xループの処理速度を
関数ポインタを使って比較してみました。

■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    aryA[XMAX][YMAX];
void    xyLoop関数(void){
    for(int x = 0;x < XMAX ;x++){
        for(int y = 0;y < YMAX;y++){
            aryA[x][y] = 'Q';       
        }
    }
}
char    aryB[XMAX][YMAX];
void    yxLoop関数(void){
    for(int y = 0;y < YMAX ;y++){
        for(int x = 0;x < XMAX ;x++){
            aryB[x][y] = 'Q';       
        }
    }
}

typedef  void (*関数ポインタ_型)(void);

void    TimeMeasurement(
    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){
    TimeMeasurement("xy関数処理時間",xyLoop関数);
    TimeMeasurement("yx関数処理時間",yxLoop関数);
}

やっている事はどちらも
2次元配列を文字’Q’で初期化です。
違いはforループの順番です。


■実験結果

gcc -Wall -Wextra vs.c -O2
./a.out
xy関数処理時間       72593 clock
yx関数処理時間     9035254 clock

筆者の環境下では
物凄く処理速度が違います。

ざっくり130倍違いました。