Рассмотрим такой сценарий:Мгновенная альтернатива локальной переменной с геттером?
class Test {
public:
Test() : _var{5} {}
inline int getVar() {
return _var;
}
private:
int _var;
}
void func(Test& t) {
int var = t.getVar();
int a = 1 + var;
int b = 2 + var;
...
int z = 26 + var;
}
int main() {
Test t;
for (int i = 0; i < 1000000; ++i) {
func(t);
}
}
Хотя профилирование аналогичное исполнение в течение ~ 40-х годов, я увидел, что GETVAR() вызов в одиночку мне стоит около 0.8s, который кажется огромным только за доступ к Int.
Однако, установив мой _var как открытый и доступ к нему напрямую (t._var) вместо использования локальной переменной и тестового getter, он еще медленнее.
Есть ли волшебное решение C++, которое почти мгновенно доступно для доступа к «_var»?
Простая магия - попросить вашего компилятора оптимизировать. –
Как вы измерили? Какой уровень оптимизации компилятора использовался тогда? –
Кэширование значения в локальной переменной происходит так же быстро, как это будет сделано, поскольку это позволяет компилятору сохранять значение в регистре, а не извлекать его из памяти каждый раз. – molbdnilo