よく知られlikely
ているunlikely
マクロとマクロは、コンパイラif
が通常入力されるかスキップされるかを知るのに役立ちます。これを使用すると、パフォーマンスが多少(わずかに)向上します。
私は最近それらを使い始めましたが、そのようなヒントをどのくらいの頻度で使用すべきかわかりません。現在、エラーチェックで使用します。if
通常はとしてマークされunlikely
ます。例えば:
mem = malloc(size);
if (unlikely(mem == NULL))
goto exit_no_mem;
それは問題ないように見えますが、エラーチェックはif
非常に頻繁に発生し、その結果、上記のマクロが使用されます。
私の質問は、すべてのエラーチェックでマクロlikely
とunlikely
マクロを持っているのは多すぎるのif
ですか?
我々がそれに取り組んでいる間、彼らは他のどのような場所でよく使われますか?
私の現在の使用法では、リアルタイムサブシステムから抽象化するライブラリにあるため、プログラムはRTAI、QNXなどの間で移植可能になります。ただし、ほとんどの関数はかなり小さく、1つまたは2つの他の関数を直接呼び出します。多くはstatic inline
機能です。
だから、まず第一に、それは私がプロファイルできるアプリケーションではありません。スタンドアロンアプリケーションではなくライブラリであるため、「ボトルネックを特定する」ことは意味がありません。
第二に、「これはありそうもないことを知っているので、コンパイラに伝えることもできます」というようなものです。私は積極的に最適化しようとしませんif
。
likely
、unlikely
存在し、彼らが何をするか。それらをいつ、どこで使用するのが最適かを実際に示唆するものは見つかりませんでした。