這兩個程序哪個運行速度更快?第一個是指向兩個函數的指針數組,這兩個函數重新分配一個變量,第二個是兩個用相同方式重新分配變量的情況的開關。使用開關或定義一組函數 - 哪個更快?
1:
#include <iostream>
void w (int &z);
void y (int &z);
int main(int argc, const char * argv[]) {
void (*p[2]) (int &a) = {w,y};
int s = 0;
for(int i=0;i<1000;i++) {
p[s](s);
}
return 0;
}
void w (int &z) {
z = 1;
}
void y (int &z) {
z = 0;
}
2:
#include <iostream>
int main(int argc, const char * argv[]) {
int s = 0;
for(int i=0;i<1000;i++) {
switch (s) {
case 0:
s = 1;
break;
case 1:
s = 0;
break;
}
}
return 0;
}
在一般情況下,做程序運行速度更快,如果你使用指針數組的功能,而不是定義switch語句的,如果你知道在編譯什麼時候根據變量的當前值執行哪些指令?或者switch語句更快?或者它們都一樣快?
您是否已經測量過自己(優化級別)? –
第一個例子使我的皮膚爬行... – DeiDei
你展示的兩個程序並不是真的相同,它們不是嚴格相似的。 –