私はこれらの2つのマクロをLinuxカーネルコードで見つけました。分岐の場合の最適化のためのコンパイラ(gcc)への命令であることはわかっています。私の質問は、ユーザー空間コードでこれらのマクロを使用できますか?最適化はありますか?どの例も非常に役立ちます。ユーザー空間コードでマクロを使用する可能性は低いですか?
答えて
はい彼らができる何かのためのカーネルヘッダで定義されてかなりの名前です。 In the Linux kernelは、それらが__builtin_expectマクロは、分岐予測を使用するGCC固有のマクロです
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
のように定義されています。プロセッサは、条件が真である可能性があるかどうかをプロセッサに知らせるので、プロセッサは分岐の正しい「側」に命令をプリフェッチできます。
あなたは他のコンパイラでコンパイルを確実にするためにIFDEFでの定義をラップする必要があります。
#ifdef __GNUC__
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#else
#define likely(x) (x)
#define unlikely(x) (x)
#endif
正しい分岐予測のためにそれを使用する場合、それは間違いなくあなたの最適化を提供します。
#elseパートでは、(x)と評価されるべきで、空ではないはずですか? –
もちろん、そうです。編集した – Tomas
どのヘッダファイルにこの定義がユーザのインクルードディレクトリに含まれていますか? –
(おそらく)と低い()マクロはが本当gcc feature
「6.2.2レベル1命令キャッシュアクセスの最適化」のWhat Every Programmer Should Know About Memoryを参照してください。正確にこれに関するセクションがあります。
@Nikolaiこのリンクをご利用いただきありがとうございます。 –
問題ありません。これは非常に啓発的な論文であり、3回目の読書でもそうです:) –
- 1. lm75カーネルモジュールがユーザー空間で利用可能
- 2. DrupalはPostGISで使用でき、空間クエリが可能ですか?
- 3. 精度が低下する可能性はありますか?
- 4. VS2017では、異なるフレームワークを使用するプロジェクト間でコードをステップスルーすることは可能ですか?
- 5. オペレーティングシステムは、ユーザー空間プログラムがカーネル空間プログラムとやりとりすることを可能にしますか?
- 6. 未定義である可能性が高いマクロ:AC_SUBST
- 7. エラー:未定義である可能性が高いマクロ:AC_PREFIX_CONFIG_H
- 8. P2Pネットワークでの空間探索は可能ですか?
- 9. エラー "このブックではマクロを使用できないか、すべてのマクロが無効になる可能性があります
- 10. 同じホストをOpenshift Originの異なる名前空間で使用することは可能ですか?
- 11. Windows:ユーザー空間からドライバメモリにアクセスする(読み取り専用) - 可能ですか?
- 12. 可能性:ラインファイルモジュールでバックスラッシュを使用するには?
- 13. ケーキパターンとマクロを統合することは可能ですか?
- 14. PHP - 公開された可視性は安全性が低いですか?
- 15. javajetコードでphp api関数を使用することは可能ですか?
- 16. 従来のASPコードでCryptUnprotectDataを使用することは可能ですか
- 17. Kubernetes。ユーザーのためにデフォルト名前空間を構成することは可能ですか?
- 18. ドメイン間でXMLHttpRequestを使用することは可能ですか
- 19. 不可能:Diffコマンドを使用している可能性を使用して
- 20. Intent.createchooserを使用している間に.mp3ファイルの期間でフィルタリングすることは可能ですか?
- 21. Rtree空間インデックスを酸洗することは可能ですか?
- 22. PQsetSingleRowMode低性能
- 23. REMOTE_ADDRが空白になる可能性はありますか?
- 24. 非CLRプログラムで.NETアセンブリを使用する可能性はありますか?
- 25. memcache - 退避する可能性の低いデータを作成する方法
- 26. マクロ翻訳お願いします(ウイルスの可能性あり)
- 27. カスタムスクリプトを使用してコードをコンパイルすることは可能ですか?
- 28. Eixirメタプログラミング - マクロ内でコンパイル時に利用可能なマクロを定義する
- 29. 低距離または低出力のBLEデバイスは誰でも利用可能または設定可能
- 30. C++ - マクロを使用すると、このコードが機能しないのはなぜですか?
http://kerneltrap.org/node/4705 – pmg
重複していますか? http://stackoverflow.com/questions/109710/likely-unlikely-macros-in-the-linux-kernel –
私はこれらの記事をチェックしましたが、どちらもカーネル関連のものについてもう一度話します。私は同じことがユーザーコードで使用できるかどうかを知りたがっています。 –