ここに C++ で次のコードがあります。
#include <iostream>
int main(int argc, const char * argv[])
{
goto line2;
line1:
std::cout << "line 1";
goto line3;
line2:
std::cout << "line 2";
goto line1;
line3:
std::cout << "line 3";
goto line4;
line4:
std::cout << "Hello, World!\n";
return 0;
}
たとえば 10,000 行のコードのより大きなプログラムを作成し、自分で作成した関数を使用しないことに決めた場合、goto ステートメントのみを使用します。グローバル変数のみを使用します。私はベストプラクティスに関しては少し正気ではありませんが、それは非常に特定の目的のためです。問題は、これは goto ステートメントで飛び回るのに効率的かということです。goto ラベルが 1000 個ある場合はどうなりますか?
goto ステートメントは、別のメモリ アドレスにジャンプするようにコンピュータに指示するマシン コードに直接変換されますか? これは、関数を呼び出すコストと比較して、このようにジャンプするマシンのコストが低いですか?
いくつかの計算を実行するための非常に効率的なプログラムを作成したいので知りたいのですが、アセンブリ/マシン コードに頼らずに非常に効率的である必要があります。
これはメンテナンス、コードのわかりやすさ、ベストプラクティスの点で悪い考えだと言う必要はありません。私はそれをよく知っています。質問への回答が欲しいだけです。関数呼び出しを使用するのが良いのか、goto を使用するのが良いのかについての議論はしたくありません。
質問を明確にするために、関数を使用する従来のプログラムと比較して、10,000 行のプログラムでのみ gotos を使用する場合がどうなるかについて懸念しています。これら 2 つのプログラムを比較対照するには、複数の方法があります。たとえば、CPU キャッシュはどのように実行されるでしょうか。関数呼び出しなしでどのような節約ができるでしょうか。通常、CPU キャッシュはスタックを近くに保持するため、コール スタックがなければ、これが CPU キャッシュにどのような影響を与えるでしょうか。そのため、キャッシュが正しく使用されていないためにパフォーマンスが低下する可能性がある場合があります。時間効率の観点から、ジャンプと比較した場合の関数呼び出しの実際のコストはいくらですか。2 つのスタイルのプログラミングを効率的に比較対照する方法はたくさんあります。