私は GCC が -O3 で何をするか (すべてのコードがコンパイルされることを確認するもの) を見ていて、インタープリター言語でループの切り替えを解除することの有用性を疑問に思っていました。Google のクロージャ コンパイラを使用する場合など、「プロダクション」対応のコードに価値があるかどうか疑問に思っていました。とにかく、これは本当にどのくらいの利益を生み出しますか?yループのxチェックだと思います。ここで、x は if else if またはケース スイッチの数、y はループの数です。つまり、x*y です。しかし、インタープリター言語を使用している場合、どれだけの価値があるでしょうか?
私はそれについて疑問に思っていたので、完全に理論的な方法でそれを尋ねています.それは何かの疑いがあり、実行中にすべての文字を読み取る必要があるため、逆になる可能性さえあります.
OK、これがループの切り替え解除について話していることです。
また、実行時にコンパイルされたり、VM を介して実行されたりする言語の意味も解釈されます。例は次のとおりです。PHP、JavaScript、BASH、Ruby、Perl など
すぐ上に言ったかどうかはわかりません。しかし、それが私が意味していたことです。入力をバイトごとに読み取ってから、使用できるものに変換する必要がある言語で。速度を上げるためにできることは他にもあることは知っていますが、それは私が考えることができる最も簡単な方法です。
通常ループ。
for(i=0;i<10;++i){
if(something==3){
do_something;
}
else{
do_something_else;
}
切り替えられていないループ(clangのドキュメントから収集できたものによると(gccのがらくた)。
if(something=3){
for(i=0;i<10;++i){
do_something;
}
else{
for(i=0;i<10;++i){
do_something_else
}
}
上記のコードは、おそらく彼らが行うことです。