East RX
Просветленный
(24468)
7 лет назад
Это зависит от конкретной ситуации (тем более при таких навороченных оптимизациях, как в компиляторах C++), но бывает, причём достаточно часто. Например, если значение переменной в данный момент находится в регистре, то при передаче по ссылке нужно:
1) сначала поместить это значение в память, выделенную для переменной;
2) вычислить точный адрес этой памяти, который на этот момент неизвестен, т. к. для адресации переменных используются относительные адреса (относительно ebp);
3) поместить этот адрес в стек.
Итого - 3 операции, примерно так:
mov [ebp - 10], eax
lea eax, [ebp - 10]
push eax
А для передачи значения из регистра достаточно одной операции - сразу отправить его в стек:
push eax
johnsilver
Просветленный
(22598)
7 лет назад
тут надо знать ассемблер. я точно не скажу, но вижу так.
при передачи значения они загружаются в стек и потом выбираются из него. к примеру положить и взять значение будет 2 такта процессорного времени. если передавать по ссылке, то скажем положить ссылку и взять ее будет те же 2 такат, + такт на загрузку значения по ссылке.
с количеством тактов вру, но вижу как то так. хочешь проверить - напиши 2 проги и проверь машинные коды.
Лёха
Мастер
(1684)
7 лет назад
Ссылка вообще не объект. Поэтому ничего не копируется.
Объект - это объект, поэтому при передаче по значению, вовнутрь функции копируется каждый его бит.
Потому и быстрее.
По ссылке.
Ещё раз учебник прочти, ты перепутал.
Или учебник дрянь.