最適化によれば、gotoとしてループを書くとスピードが向上しますか?gotoとしてループを書くと、速度は向上しますか?
私はgotoとしてループを書きましたが、run_timeのスピードアップがあるのでしょうか?
例:
for (..) {
}
as
A:
if (...)
goto A
最適化によれば、gotoとしてループを書くとスピードが向上しますか?gotoとしてループを書くと、速度は向上しますか?
私はgotoとしてループを書きましたが、run_timeのスピードアップがあるのでしょうか?
例:
for (..) {
}
as
A:
if (...)
goto A
ほぼ確実ではありません。コンパイラオプティマイザは、今日はかなり良いです。
いいえありません。
マシンレベルでは、ループを最適化するとき(ループのアンローリングなどの手法を使用して)コンパイラは一般的に人間よりもはるかに優れています。それは、基礎となるアーキテクチャのより良い知識を持っています。
これはgotoが役に立たないと言うわけではありません。状況によっては非常に便利です。ループを実装するためだけではありません。ただし、ループ文の内部に入力したい場合に使用できます。最も近代的なコンパイラはloop unrolling [他の最適化の中]を使用してループを最適化するため、
あなたは、GCC、または他の近代的なコンパイラを使用している場合は、悪化しプリフォームしやすくなります。
あなたのコードを手作業で最適化しようとすると、現代のコンパイラがコードを最適化でき、あなたよりもはるかに優れた仕事をするでしょう。コンパイル時に最適化をオンにすることを忘れないでください。
また、ループの代わりにgotoステートメントを使用すると、コードを読むことができなくなります。ループの意図が失われ、コードを把握するのが難しくなります。これは後でメンテナンスの悪夢を呼び起こす。
試してみてください。両方が同じであることを確認して、アセンブリを比較してください。 – Mat
@マット、あなたは彼らが同じであると言うことを試みていますか? –
@opalgo、ちょうどあなた自身のためにそれを試してください、あなたはあなた自身のビルドセットアップで確かに知っているでしょう。 – shuttle87