0

例如,假设我想枚举一个字符串列表 {“ALPHA”、“BETA”、“GAMMA”、“OMEGA”}。我能想到的两种方法:

--- 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 工作得更快,但也占用了更多的内存空间,因为它需要数组的空间;而方法 1 每次调用 getType(..) 时都需要更多时间,但需要更少的内存,因为变量只存储在汇编命令中。但我仍然不知道 C++ 或其他语言编译器将如何处理代码,可能会产生完全不同的东西。

4

1 回答 1

1

只需使用数组。对于大量的字符串,它显然更有效,而对于少量的字符串,在 switch 语句上使用数组的开销无论如何都是微不足道的。你学会不做疯狂的事情的好处是值得额外的开销。:-)

如果您真的想分析差异,我认为您会发现它可能取决于您运行它的机器的资源,因为一种方法显然更占用内存,而另一种方法更多 CPU。

于 2013-03-05T20:34:24.750 回答