次の状況でのメンバー関数の呼び出しにおけるパフォーマンスの低下について質問があります。
私は物理計算のコードに取り組んでおり、巨大な行列や線形代数などを操作するなど、多くの時間のかかるタスクがあります。ログ ファイルを処理するクラスを設計しました。と呼ばれるブール型debug_mode_on
はtrue
. 関数のシグネチャは
void write_debug_msg(const data_type1 &text1, const data_type2 &text2, etc)
インライン化され、テンプレート化され、オーバーロードされたもの。入力として、任意の型の最大 15 個の引数を受け取ることができます。
debug_mode_on
わかりました...問題は、いつfalse
関数が呼び出され、何も行われないかです。それ以外の場合は、明らかに、引数がログ ファイルに書き込まれます。それでは、かなりのペナルティパフォーマンスはありますか?私のポイントは、それがvoid関数型であるという事実であり、戻り値はありません。すべての引数は参照として与えられます。また、インライン化されています。私の見解では、真のペナルティは bool 型 (aif
ではなくswitch
ステートメント) の評価だけです。そうですか?
switch
または、参照によって与えられた引数を使用したインライン化された void 関数の呼び出しは、何らかの形で高価になる可能性があり、ステートメントよりも評価について話しているのでしょうか?
もちろん、この問題を攻撃するために使用されたのと同じ戦略に従っているわけではありません。つまり、デバッグ モードに関するすべてのものを、 や などのマクロで囲み#ifdef DEBUG_MODE
ます#endif
。ランタイムでデバッグモードを制御できるようにするためだけに、このようにしています。