私は、プリプロセッサは、コンパイラがコンパイルされた関数定義のコピーを各関数呼び出しに書き込む間に、コンパイル前にコードをマクロのコピーテキストとして展開すると信じています。したがって、どちらの場合も、通常の関数呼び出しのオーバーヘッドは避けましたが、この場合、オーバーヘッド、インライン関数、またはMACROがより高速で、より少ないですか?より高速なインライン関数またはMACROです
答えて
マクロは、コンパイラのヒューリスティックにマクロがインライン展開されるかどうかに関わらず、「高速」になります。マクロの欠点を考えれば、この決定をコンパイラに任せておく方が良いでしょう。デバッグレベルと対応するソースコードにも問題があります。最適化レベル、 '強制的な'インライン展開、たとえば__attribute__ ((__always_inline__))
(gcc/clang)さらに重要なことは、マクロ内での複数式の展開/評価などの一般的な落とし穴を避けることです。
私はS.O.を行っていません。質問の検索(あなたは習慣に入るべきです)が、これは以前よりずっと詳細に答えられていると思われます。
OTOH、コンパイラが関数をインライン化していない場合、そうしないとよい理由があるかもしれません。それはコードをスピードアップするかもしれません!そして、あなたは他の重要な違いを見逃しました。おそらくそれは実際にはダブルを検索する方が良いです – Olaf
@Olaf - 私は確かに他の用途を見逃しています。マクロがまだ高性能なコードで表示されているという事実。 Linuxやその他の高性能なソフトウェアで見つかった '__asm__'ブロックマクロと似ています。非テール再帰呼び出しは、例えばインライン化することはできません。 「軽量」可視関数によって呼び出される翻訳単位の高価な静的関数は、コードを膨らませます。 –
マクロを必要とする他の理由、特にアセンブラコードやテンプレートのようなコード生成がある。例えばこの問題があった。即時オペランドを必要とするブレークポイント命令では、gccはインライン引数を適切に 'asm'制約に渡すことができず、アセンブラは不平を言った。しかし、ほとんどのマクロは現在では時代遅れであり、しばしば最新の進歩(LTOを含む)を逃した/無視したばかりのpplに由来します。上記のような質問をしている人は、通常、機能的なマクロ(犯罪はなく、ただの観察)は必要ありません。 – Olaf
- 1. インライン関数でMACRO __FUNCTION__を使用してください
- 2. ローカルメンバーがより高速またはインスタンスメンバー
- 3. 速く何、インライン関数呼び出しまたはハッシュマップ検索
- 4. Nymphyの乗算関数よりも、VectoriousのMatrix.product関数が高速ですか?
- 5. gsub()よりも高速な置換えのためのLua文字列のreplace()関数はありますか?
- 6. 関数ポインタは、インライン関数より速く実行されます。どうして?
- 7. ハスケル関数の純粋な実装は、よりスマートなソリューションよりも高速ですか?
- 8. PHP Domドキュメントのhtmlは高速ですか、preg_match_all関数が高速ですか?
- 9. Arrow関数はこのメソッドをバインドするよりも高速です
- 10. より高速です:計算または代入
- 11. マルチスレッドメモリアクセスは、シングルスレッドメモリアクセスより高速ですか?
- 12. "startsWith"は "indexOf"より高速ですか?
- 13. 最適なパス関数の高速化
- 14. MySQL:varcharフィールドより高速な整数との比較ですか?
- 15. TemplateControl.ParseControlより高速な代替手段はありますか?
- 16. ioutil.ReadFileより高速な代替手段はありますか?
- 17. sumif関数vba高速
- 18. JavaがC++よりも高速な場合(またはJITが高速でプリコンパイルされている場合)
- 19. より速い高調波数?
- 20. 関数はなぜC#のStartswithより速いですか?
- 21. MSMQがWCF QueueServiceより高速なのはなぜですか?
- 22. なぜWebViewはTextViewよりもはるかに高速です
- 23. なぜVimでは\%(\)が\(\)より高速ですか?
- 24. Pythonラムダ式で高速または通常の関数ですか?
- 25. より高速なRコード行
- 26. VBA:より高速なレコードセットの接続
- 27. Get ["raggedmatrix.mx"]よりデータのインポートが高速になりますか?
- 28. なぜfile_get_contentsはmemcache_getより高速ですか?
- 29. はより高速なRCNN回転不変式ですか?
- 30. なぜopenssl_pkey_newはgpgよりもずっと高速ですか?
私は前処理されたコードで両方の違いを表示できますか? –
私はMAX(x、y)(x> y?x:y)を持っています.... int(int x、inty){return x> y? x:y;} –
もっと速い?あなたは働くことを意味しますか? –