BuringStraw

BuringStraw

没卵用的卡常实验

没卵用のカーネル実験#

誰かが言ったことを思い出した、三項演算子はif-elseより遅いと。

また、inlineを追加すると実際にはもっと遅くなるとも言われています。

それでは、実験をしてみましょう。

(こんなバカな実験を公開するのは恥ずかしい)

準備#

  • 3 つの方法で書かれた "関数"。私は非常に初心者なので、最も簡単なmaxを使用しました。

    #define max(a, b) ((a) > (b) ? (a) : (b))
    
    int max (int a, int b) {
    	if (a > b) return a;
    	else return b;
    }
    
    int max (int a, int b) {
    	return ((a) > (b) ? (a) : (b));
    }
    

    後の 2 つはそれぞれinlineありとinlineなしでテストしました。

  • メインプログラム

    srand()のないrand()を使用してデータを生成しました。これにより、データはランダムに分布しており、合計のデータも同じです。

    int main (void) {
    	for (int i = 1; i <= 100000000; ++i) {
    		int x = rand(), y = rand();
    		int z = max(x, y);
    	}
    	return 0;
    }
    
  • 計算機utools は本当に便利です

プロセス#

科学的な実験原則に基づき、各テストを 5 回行い、平均値を取りました。

結果#

上から下に順に、defineif-elseなしif-elseあり三項演算子なし三項演算子ありです。

UTOOLS1572873241403.png

結論#

defineは非常に速く、できるだけ使用してください。

三項演算子はif-elseよりも速いです。

inlineを使用すると、inlineを使用しないよりも速くなります。
。。。。。。。。。。。
あまり大きな違いはないようです

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。