私はハッシュ関数について読んでいました(私は中級のCS学生です)、これに出くわしました:
int hash (const string & key, int tableSize) {
int hasVal = 0;
for (int i = 0; i < key.length(); i++)
hashVal = 37 * hashVal + key[i];
.....
return hashVal;
}
私はこのコードを見ていて、代わりにこれを行うたびに key.length() を呼び出す代わりに、for ループ内にある方が高速であることに気付きました。
int n = key.length();
for (int i = 0; i < n; i++)
私の質問は、これはパフォーマンスをわずかに改善するための非常に明白な方法であるため、コンパイラは自動的にこれを行うのでしょうか? コンパイラについてはまだよくわかりませんが、この質問の答えに興味がありました。より少ない操作を使用するコードを作成するとき、私が行うことはコンパイラによって既に行われていることが多いため、インライン関数などを実行して時間を無駄にしていると指摘されることがよくあります。私は物理処理が効率的である必要があるゲームをプログラミングしているので、物事がぎこちなく感じられないようにしています。