没卵用のカーネル実験#
誰かが言ったことを思い出した、三項演算子は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 回行い、平均値を取りました。
結果#
上から下に順に、define
、if-elseなし
、if-elseあり
、三項演算子なし
、三項演算子あり
です。
結論#
define
は非常に速く、できるだけ使用してください。
三項演算子はif-else
よりも速いです。
inline
を使用すると、inline
を使用しないよりも速くなります。
。。。。。。。。。。。
あまり大きな違いはないようです