Однажды я заметил это случайно, и теперь решил тщательно его протестировать.
Итак, когда я вызываю функцию:
#define Type int
#define Prm const Type &
Type testfunc1(Prm v1, Prm v2, Prm v3, Prm v4, Prm v5, Prm v6, Prm v7, Prm v8, Prm v9, Prm v10){
return (v1|v2|v3|v4|v5|v6|v7|v8|v9|v10);
}
100 миллионов раз:
for(Type y = 0; y < 10000; y++){
for(Type x = 0; x < 10000; x++){
out |= testfunc1(x,y,x,x,y,y,x,y,x,y);
}
}
С типами int
, const int
и const int &
я заметил, что const int
быстрее, чем const int &
. (Примечание: я использую возвращаемое значение, чтобы гарантировать, что функция не будет оптимизирована).
Почему это так? Я всегда думал, что добавление &
на самом деле сделает это быстрее, но тесты говорят об обратном. Я знаю, что для больших типов данных это может быть другой результат, хотя я не проверял их, так как я совершенно уверен в результатах.
Мои тесты:
const int: 7.95s
const int &: 10.2s
Редактировать: Я думаю, что это действительно из-за моей архитектуры; Я проверил с типом Sint64
и результаты были:
const Sint64: 17.5s
const Sint64 &: 16.2s
Edit2: Или это? Протестировано с типом double
(что является 64-битным?), И результаты вызывают у меня недоумение:
const double: 11.28s
const double &: 12.34s
Edit3: обновлен код цикла, чтобы он соответствовал моим новейшим тестам с 64-битными типами.