4

最適化されたコードを見ると、ループのスコープ内でのみ使用されているパラメーターの宣言がループの外に移動されていることがわかります。

このようなもの:

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、ループ内でオブジェクトを作成することを検討しましたが、初期化ではなく宣言に関連するコストに関するものであるため、これは別の質問であると考えてください。)

編集 - 改善されたタイトル

4

2 に答える 2

1

一般的な答えはありません。これは、B の型、使用しているコンパイラ、およびおそらくループ内で (代入後に) 何を行っているかによって異なります。できることは測定することだけですが、それでも、特定のマシンで実行されている特定の 1 つのコンパイラについてしかわかりません。

于 2012-06-15T14:40:11.563 に答える