たとえば、文字列 { "ALPHA", "BETA", "GAMMA", "OMEGA" } のリストを列挙したいとします。これを行うには、次の 2 つの方法があります。
--- Method 1 ---
string getType(int a)
{
switch(a)
{
case 0: return "ALPHA";
case 1: return "BETA";
case 2: return "GAMMA";
case 3: return "OMEGA";
}
}
または、文字列の配列を作成し、それを使用して対応する文字列要素を返すこともできます。
--- Method 2 ---
string data[] = { "ALPHA", "BETA", "GAMMA", "OMEGA" };
string getType(int a)
{
return data[a];
}
(非常に大きなデータ セットを想定して) コンパイラはこれら 2 つの方法をどのように処理しますか? 最終的なアセンブリ コードはどのようになりますか? ある方法は他の方法よりも要素を取得するのが速いですか? メモリ内でより多くのスペースを必要としますか? それとも同じマシンコードに変換されますか?
私の最善の推測では、方法 2 はより高速に動作しますが、配列用のスペースが必要になるため、メモリ内のスペースも多く占有します。一方、メソッド 1 は getType(..) が呼び出されるたびに時間がかかりますが、変数はアセンブリ コマンドにのみ格納されるため、必要なメモリは少なくて済みます。しかし、C++ や他の言語のコンパイラがコードをどのように処理し、まったく異なるものを生成できるかはまだわかりません。