Какая из этих двух программ работает быстрее? Первый - это массив указателей на две функции, которые повторно назначают переменную, вторая - это переключатель из двух случаев, которые переписывают переменную таким же образом.Использование переключателя или определение массива функций - что быстрее?
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 быстрее? Или они оба так же быстро?
Вы уже измеряли себя (с включенными уровнями оптимизации)? –
Этот первый пример делает мою кожу сканирующей ... – DeiDei
Две программы, которые вы показываете, на самом деле не эквивалентны, они не являются строго сопоставимыми. –