手続き型プログラミングでは、複雑なコードをメンテナンスするために機能的分解が理想的です。しかし、関数は高価です - 呼び出しスタックに追加し、パラメータを渡し、戻りアドレスを格納します。このすべてに余分な時間がかかります!スピードが重要な場合は、どうすれば両方の世界のベストを得ることができますか?関数呼び出しで必要なオーバーヘッドがなくても、非常に分解されたプログラムが必要です。私は「インライン」というキーワードに精通していますが、それはコンパイラにとっての示唆に過ぎないと思われます。プログラマが誤って使用すると、さらに遅いプログラムが生成されます。私はg ++を使用していますので、-03フラグは機能を呼び出す関数を呼び出す関数を最適化します。 私の懸念が有効で、この問題に対処する方法があるかどうかを知りたかっただけです。機能を回避してプログラムの速度を向上させますか? (C++)
答えて
まず、パフォーマンスの問題を扱う際には常に、プロファイラを使用してボトルネックを調べてみる必要があります。最初に出てくるのは、通常、関数呼び出しではなく、大きなマージンです。あなたがこれをしたなら、次に読んでください。
次に、inline
キーワードを使用して、インライン化する機能を少し期待することができます。コンパイラは通常インラインにするものとインラインにしないものを知るのに十分なほどスマートです(忘れてしまった関数をインライン展開することができ、助けにならないと思ったらインライン展開できないかもしれません)。
関数呼び出しのパフォーマンスを向上させ、インライン展開を実行したい場合は、コンパイラによってはこれを行うことができます(questionを参照)。大規模なインライン展開が実際にパフォーマンスを低下させる可能性があることを考慮してください。コードで多くのメモリが使用され、コードのキャッシュミスが以前よりも多くなることがあります。
私はスピードがそれほど重要ではないと思っていますが、私の提案はプリプロセッサマクロを使用することです。例えば
#define max(a,b) (a > b ? a : b)
これは私には明白なように見えるだろうが、私は自分自身C++には期待して考えていないので、私は質問を誤解している可能性があります。
(1)マクロはC++では慣用的ではなく、テンプレートはすべての点でより効率的であり、効率的であり、スコープを尊重します。 (2)他の回答(ここや他の箇所)で説明されているように、たくさんのものをインライン展開するだけでは、パフォーマンスを改善する可能性はあまりありません。 – delnan
あなたが心配している特定のコードであれば、自分で時間を測定できます。それをループで大量に実行し、前後のシステム時間を取得するだけです。その差を使って各通話の平均時間を求めます。
あなたのシステムとコンパイラによって異なるため、いつもの数字は主観的です。異なるメソッドから取得した時間を比較して、関数をマクロで置き換えるなど、一般的に高速なものを確認することができます。私の推測では、多くの違いに気付かないでしょう、または少なくともそれは重要ではないでしょう。
スローダウンがJ.Nのアドバイスに従っているかわからない場合は、コードプロファイラを使用して、必要な場所を最適化してください。経験則として、参照やconst参照によって大型オブジェクトを関数に渡すと、コピー時間を避けることができます。
- 1. JavaScriptの速度を向上させる
- 2. BufferedReaderの速度を向上させる
- 3. どのようにフロートlerp機能の速度を向上させるには?
- 4. ループを回避してパフォーマンスを向上させる
- 5. リモートODBCクエリの速度を向上させますか?
- 6. サブクエリの速度を向上させます
- 7. YouTubeの再生速度を向上させるプログラムの作成方法
- 8. HOwはファイルを圧縮してWeb速度を向上させます
- 9. 3進演算子は実行速度を向上させますか?
- 10. 描画速度を向上させるSurfaceView Android
- 11. apache sparkでフラットマップ操作を回避してパフォーマンスを向上させる方法
- 12. C/Rcppのダイス係数の計算速度を向上させる
- 13. Tensorflowの画像分類の速度を向上させる
- 14. MySQLへのMSSQLの挿入速度を向上させる
- 15. jqueryベースの検索の速度を向上させる
- 16. ファイルの存在チェックの速度を向上させる
- 17. sRGBからLabへの色変換速度を向上させます
- 18. OverlayViewの描画速度を向上させる
- 19. Pythonモジュールのインポート速度を向上させる
- 20. PHP CLIの出力速度を向上させる方法
- 21. 大量収集クエリの速度を向上させる
- 22. Python:リストのループ速度を向上させる
- 23. WooCommerceのダウンロード速度を向上させる
- 24. テーブル、インデックス、ストアドプロックの作成速度を向上させる方法
- 25. drupalでウェブページの速度を向上させる方法
- 26. mySQLクエリの速度を向上させる
- 27. IntelliJコードエディタの速度を向上させる方法は?
- 28. Mysql/PHPのクエリ速度を向上させる
- 29. iOS UIテストの速度を向上させる
- 30. ASP.NETサイトの開発速度を向上させる
[LinuxでC++コードをプロファイルするにはどうすればよいですか?](http://stackoverflow.com/questions/375913/what-can-i-use-to-profile-c-code-in- linux) –
通常、それについて心配しないでください。 'inline'キーワードを使用しなくても、良いコンパイラができる限りインラインでインライン展開されます。 –
あなたの懸念事項は**有効ではありません**。 (1)どういうわけか、あなたがその状況にいるとは思わない、(2)その人が推測と伝聞によって遠くに得られない、ということです。 – delnan