よく知られ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存在し、彼らが何をするか。それらをいつ、どこで使用するのが最適かを実際に示唆するものは見つかりませんでした。