私はこれらの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. DrupalはPostGISで使用でき、空間クエリが可能ですか?
- 2. 精度が低下する可能性はありますか?
- 3. P2Pネットワークでの空間探索は可能ですか?
- 4. Windows:ユーザー空間からドライバメモリにアクセスする(読み取り専用) - 可能ですか?
- 5. ケーキパターンとマクロを統合することは可能ですか?
- 6. javajetコードでphp api関数を使用することは可能ですか?
- 7. 従来のASPコードでCryptUnprotectDataを使用することは可能ですか
- 8. ドメイン間でXMLHttpRequestを使用することは可能ですか
- 9. Intent.createchooserを使用している間に.mp3ファイルの期間でフィルタリングすることは可能ですか?
- 10. REMOTE_ADDRが空白になる可能性はありますか?
- 11. memcache - 退避する可能性の低いデータを作成する方法
- 12. 非CLRプログラムで.NETアセンブリを使用する可能性はありますか?
- 13. Postgresで間隔を空けて可変期間を使用する
- 14. ノード間でファイルをコピーする可能性があります
- 15. TFSビルドでKarmaを使用する可能性
- 16. Android 1.5のAndroidでMonoを使用する可能性
- 17. iOSデバイスを使用する色空間はどれですか?
- 18. 他のプロジェクトで利用可能な名前空間
- 19. AJAXを使用してGoogleでクロール可能性をテストするにはどうすればよいですか?
- 20. linuxカーネル空間のユーザー空間スタックトレースを表示するには
- 21. UI関連オブジェクトはどれくらいの期間使用可能ですか?
- 22. このWindowsIdentityコードを間違ったユーザーに騙すことは可能ですか?
- 23. TYPO3の可能な最低限の権限は何ですか?
- 24. この名前空間の使用は正しいですか?
- 25. xulでjqueryを使用することは可能ですか?
- 26. BackJone.jsでExtJSを使用することは可能ですか?
- 27. ライブラリでThreadPoolを使用することは可能ですか?
- 28. ORをSelenium.Clickで使用することは可能ですか?
- 29. cでシリアルポートクラスを使用することは可能ですか?
- 30. vimをマウスで使用することは可能ですか
http://kerneltrap.org/node/4705 – pmg
重複していますか? http://stackoverflow.com/questions/109710/likely-unlikely-macros-in-the-linux-kernel –
私はこれらの記事をチェックしましたが、どちらもカーネル関連のものについてもう一度話します。私は同じことがユーザーコードで使用できるかどうかを知りたがっています。 –