Другие языки программирования и технологии

Почему в C++ передача аргумента функции по значению считается более быстрой, чем по ссылке?

Удивился, когда прочел это в учебнике, т. к. всегда думал обратное.
Это зависит от конкретной ситуации (тем более при таких навороченных оптимизациях, как в компиляторах C++), но бывает, причём достаточно часто. Например, если значение переменной в данный момент находится в регистре, то при передаче по ссылке нужно:
1) сначала поместить это значение в память, выделенную для переменной;
2) вычислить точный адрес этой памяти, который на этот момент неизвестен, т. к. для адресации переменных используются относительные адреса (относительно ebp);
3) поместить этот адрес в стек.
Итого - 3 операции, примерно так:

mov [ebp - 10], eax
lea eax, [ebp - 10]
push eax

А для передачи значения из регистра достаточно одной операции - сразу отправить его в стек:

push eax
ЖК
Женя Курман
24 295
Лучший ответ
Выбрось этот учебник.
тут надо знать ассемблер. я точно не скажу, но вижу так.
при передачи значения они загружаются в стек и потом выбираются из него. к примеру положить и взять значение будет 2 такта процессорного времени. если передавать по ссылке, то скажем положить ссылку и взять ее будет те же 2 такат, + такт на загрузку значения по ссылке.
с количеством тактов вру, но вижу как то так. хочешь проверить - напиши 2 проги и проверь машинные коды.
Ссылка вообще не объект. Поэтому ничего не копируется.
Объект - это объект, поэтому при передаче по значению, вовнутрь функции копируется каждый его бит.

Потому и быстрее.
По ссылке.

Ещё раз учебник прочти, ты перепутал.
Или учебник дрянь.