же спрошу здесь (если что-то скажите, тогда)
Почему не стоит всегда передавать параметры в функцию по константным ссылкам; говорят, простые типы лучше передавать by value (провоцируя копирование). Вроде как дело в том, что передача по значению позволяет компилятору произвести некоторые оптимизации. Говорится, что в передаче по ссылке её еще надо разыменовывать, но разве ссылки это не compile-time фича, когда адрес объекта по ссылке подставляется на этапе компиляции?
В общем вопрос: что за оптимизацию производит компилятор в передачах по значению и откуда берется оверхэд на разыменование ссылок.
void f(const int& param) { return param + param; } -> lea edi, [esp-x] call f mov eax, [edi] //deref add eax, [edi] //deref ret void f(int param) { return param + param; } -> mov edi, [esp-x] //deref call f lea eax, [edi + edi] ret
By value рекомендуется передавать параметры, которые достаточно малы и помещаются на стек или в регистры процессора. Обычно передача по ссылке или значению влияет только на не-inline методы. Компилятор не может проводить inline оптимизацию там, где он не имеет права нарушать ABI.
Обсуждают сегодня