最適化されたコードを見ると、ループのスコープ内でのみ使用されているパラメーターの宣言がループの外に移動されていることがわかります。
このようなもの:
A arr[BIG_NUMBER];
// .... //
for (int i=0; i!=BIG_NUMBER; ++i)
{
B b = arr[i].getB();
// ... do some work with b.
}
これに変わります:
A arr[BIG_NUMBER];
// .... //
B b;
for (int i=0; i!=BIG_NUMBER; ++i)
{
b = arr[i].getB();
// ... do some work with b.
}
おそらくその理由は、継続的に を再宣言することを節約しているからですb
。しかし、これは合理的なことでしょうか?また、Bがプリミティブ型かクラスかで答えが違うのでしょうか?
ループの内容が同じスタック フレーム内に存在するため、for ループ内の変数のスコープ制限により、ループ外で変数にアクセスできない可能性があると考えていましたが、「実際の」宣言は 1 回しか行われません。
(NB、ループ内でオブジェクトを作成することを検討しましたが、初期化ではなく宣言に関連するコストに関するものであるため、これは別の質問であると考えてください。)
編集 - 改善されたタイトル