我試圖比較switch
語句和查找表的性能,如下所示。C++:Switch語句與查找表的性能
這是使用switch
語句的代碼
#include <stdio.h>
int main()
{
int n = 3;
for (long i = 0; i < 10000000; ++i) {
switch (n) {
case 0:
printf("Alpha");
break;
case 1:
printf("Beta");
break;
case 2:
printf("Gamma");
break;
case 3:
printf("Delta");
break;
default:
break;
}
}
return 0;
}
,這裏是使用查找表的代碼:
#include <stdio.h>
static char const * const Greek[4] = {
"Alpha",
"Beta",
"Gamma",
"Delta"
};
int main()
{
int n = 3;
for (long i = 0; i < 10000000; ++i) {
if (n >= 0 && n < 4) {
printf(Greek[n]);
}
}
return 0;
}
我運行在Ubuntu 14.04兩個編程,gcc版本4.8.4,使用PERF版本4.4.13來分析性能。而結果是:
- 開關聲明:6.764077822秒
- 的查找表:6.665140483秒
我不知道爲什麼switch語句比查找表的運行速度較慢。正如我所知道的,使用跳轉表的切換語句,我認爲它應該比我的程序中的查找表運行得更快(它有額外的if語句)。
您的計時包括對'printf'的調用,這可能會導致結果不準確。 – Jonas
你應該看看生成的彙編代碼。 –
,如果你打開了優化,'switch'和'if'將被一個優化的編譯器優化掉。 – geza