今、パフォーマンスに関する答え。
ブロック内のローカル (ブロック用) データを宣言して初期化する必要がありますか? これには実行時のパフォーマンス コストがありますか (スタックでの実行時の割り当てによる)?
ローカル変数の割り当ては実質的に自由です。ほとんどの場合、スタック ポインターの更新は、値をスタックに書き込む命令と同じ命令で実行されるため、実際には解放されます。割り当て解除も自由 (スタックから何かがポップされたとき) か、戻り時に 1 回行われます (スタック フレームが作成されたとき)。
または、関数エントリですべての変数を宣言および/または初期化する必要がありますか?
割り当ては事実上無料ですが、コンストラクター/デストラクタの実行は無料ではありません。これはプリミティブ型の変数には当てはまりませんが、スマート ポインターなどを含む事実上すべてのユーザー定義型に当てはまります。関数の先頭でスマート ポインターを宣言しても、それを半分の時間しか使用しない場合は、スマート ポインターを構築してから、必要な 2 倍の回数だけ破棄することになります。
また、必要に応じて初期化するための情報がある変数を宣言する場合は、最初にデフォルトで構築して後で値を変更するだけでなく、必要な状態に直接構築できます (代入演算子を使用)場合が多い)。そのため、パフォーマンスの観点から、変数は常に後で宣言し、必要なブロックでのみ宣言する必要があります。
または、if() ブロックは数行しかなく、プログラムで 1 つしか使用されていませんが、異なる関数でブロックを分離する必要がありますか?
いいえ、これはパフォーマンスの観点から完全に矛盾しています。各関数呼び出しにはオーバーヘッドがあり、ほとんどの場合、10 ~ 20 サイクルだと思います。その間にかなりの計算を行うことができます。