PLOの諸経費

 

資源を大量に消費するタスクに関連して、従来の手続き型プログラミングと比較して、OOPを使用した場合のオーバーヘッドはどの程度か、という疑問が生じました。

どなたかそのようなテストをされた方はいらっしゃいますか?

との違いに興味があります。

  1. パラメータ付き関数呼び出し
  2. パラメータなしの関数呼び出し
  3. 上記関数の機能を持つマクロの呼び出し
  4. 関数呼び出し - クラスのメソッド
  5. 仮想関数 呼び出し

 

どのようなオーバーヘッドになるのでしょうか?

マシンコードの話なら、私の知る限り、仮想関数は 仮想関数テーブルを通じて間接的にプロシージャを呼び出します。しかし、通常の機能の場合は直接呼び出すことになる。オーバーヘッドはほとんどないと思います。

プログラマーのオーバーヘッドは、コードの記述やメンテナンス、バグの修正など、もっと重要です。

 

パラメータを持たない関数は、パラメータを持つ関数よりも高速に動作します。

 
Dmitry Fedoseev:

パラメータを持たない関数は、パラメータを持つ関数よりも高速に動作します。


もちろん、2年間はアセンブラで叩いていましたよ ))確かに、組み込みプロセッサの場合はそうですが、C++は常にC++です。パラメータのない関数でもプロローグとエピローグがあり、これにも時間がかかる。

もちろん、一番手っ取り早いのは、関数のように見えるように設計されたマクロを使うことです。MQLにインライン関数が ないのは残念ですが、マクロはその代用として

 
George Merts:

どのようなオーバーヘッドになるのでしょうか?

マシンコードの話なら、私の知る限り、仮想関数は 仮想関数テーブルを通じて間接的にプロシージャを呼び出します。そして、通常の機能の場合は直接呼び出すことになります。オーバーヘッドはほとんどないと思います。

プログラマーのオーバーヘッドは、コードの記述やメンテナンス、エラー訂正など、より重要なものです。


もちろん、実行時間のオーバーヘッドは気にしません。余分なキロバイトは重要ではありません。私たちは、そんな余分なキロバイトは気にしません。

 

もちろん、マクロが一番手っ取り早いでしょう。

 
Alexey Volchanskiy:

一番手っ取り早いのは、もちろん関数として設計されたマクロです。MQLにはインライン関数が ないのが残念だが、マクロで代用できるだろう

リナートは、「MTはインラインの機能が本格的で、いい結果を出している」と語った。

 
George Merts:

リナトは、MT-シリアスインライナーは機能し、良い結果をもたらすと語った。


はい、個人的な見解ですが、MT4ではインライナーの動作はスタックサイズ(スタック内の変数に割り当てるメモリ)と変数の数に依存します。
しかし、MT5ではスタックサイズへの依存がなくなり、一般的にオプティマイザがよりアシストしてくれるようになったようです。

 
Alexey Volchanskiy:

資源を大量に消費するタスクに関連して、従来の手続き型プログラミングと比較して、OOPを使用した場合のオーバーヘッドはどの程度になるのかという疑問が生じました。

どなたかそのようなテストをされた方はいらっしゃいますか?

との違いに興味があります。

  1. パラメータ付き関数呼び出し
  2. パラメータなしの関数呼び出し
  3. 上記関数の機能を持つマクロコール
  4. 関数呼び出し - クラスのメソッド
  5. 仮想関数 呼び出し

すぐに使えるOOPライブラリがあれば、アプリケーションの開発期間を短縮することができます。仮想関数を呼び出すと、実行速度が遅くなる場合があります。

唯一のニュアンスは、優れたOOPライブラリの利用が可能であることです。

"標準ライブラリ "は私の美意識を犯し、DLLに行き、C++で静かにコーディングするようになる


 
George Merts:

リナートは、「MTでは、本格的なインライナーが有効で、良い結果が得られる」と話しています。

そう、インライナーはとてもアグレッシブでオートマチックなのです。

x64のコードオプティマイザも32ビット版より頭一つ抜けています(このブランチは完全に停止しており、開発されていません)。さらに、x64オプティマイザは、ほとんどの仮想関数を 直接およびインライン呼び出しにアンロールする方法を知っています。結局のところ、仮想関数は縮退していることが多いのです。

しかし、本当のオーバーヘッドは、参照操作とダイナミックインデックスの制御です。常にコントロールしなければならないのです。

 
Alexey Volchanskiy:

資源を大量に消費するタスクに関連して、従来の手続き型プログラミングと比較して、OOPを使用した場合のオーバーヘッドはどの程度になるのかという疑問が生じました。

もちろん、OOPのいいとこ取りの機能は、リソースや時間のかかるデバッグにコストがかかる。OOPが意味を持つのは、便利なテキストラッパーとして、あるいは実行時の初期化で最低限使う場合だけ......。実は、OOPは プログラマーの労働時間のコストを上げ、より高度な機器の購入を促すためのマイクロソフト社のマーケティングに過ぎなかったのです。しかも、彼ら自身はバカではなく、すべてのソフトウェアをC言語とアセンブラで書いている。

理由: