C/C++

Почему при работе с небольшими объёмами данных передача параметров по адресу может быть эффективнее, чем по значению?

И наоборот?
Скажем так, разница между передачей по адресу и по значению целого числа размером с указатель может иметь место быть в различных компиляторах или разных версиях, но делать какие-либо далеко идущие выводы из этого не стоит. В общих чертах при передаче единственного параметра размером в 32-бита на аналогичной архитектуре через fastcall происходит следующее:
В случае передачи по адресу на месте вызова в регистр ecx должен быть записан адрес переменной (известный во время компиляции, т.е. просто помещение числового значения в регистр), а в самой функции будет чтение памяти в какой-то регистр из этого адреса.
В случае передачи по значению на месте вызова будет произведено чтение памяти в регистр ecx значения переменной, а в самой функции можно будет работать с этим регистром сразу.

При таком раскладе экономится одна ассемблерная команда, время выполнения в тактах которой значительно меньше, чем чтение из памяти в регистр раз в 5-20. В действительности и этой экономии может не быть, так как значения уже могут быть подтянуты в кэш-память плюс к этому сгенерирован код вызова, время выполнения в тактах значительно выше, чем полученная экономия и ряд других условий которые могут изменить время работы обоих вариантов в произвольную сторону
Леонид Девицын
Леонид Девицын
30 155
Лучший ответ
эффективнее с точки зрения чего? ну вот есть память, а есть процессор. допустим ты передал данные по адресу, и у тебя какая-то логика, которая связана с проверками на то, чтобы не выйти за пределы определенные буфера, чтобы одна функция не перезатерла данные по ссылке так, чтобы другая функция что-то тааамм и тд. и вот всю эту парашу надо же в виде ифоф писать да?

вот выполнение всех этих ифов будет процессорное время жрать, но по памяти ты в выйгрыше, ты передал по ссылке же данные?

а если процессор слабый, а памяти много, может кусок данных просто скопировать и передать в функцию, чтобы раз-два сделал че-то и не паришься
Глеб Никонов
Глеб Никонов
4 636
Очевидно, это задача куда проще :)
B@
Bumer @mail.ru
1 047
Сорока Анатолий Нет, не очевидно.
Потому что вопрос звучит так: почему одних случаях по адресу, в других - выгоднее по значению. Если с небольшими объёмами по значению - должно работать быстрее.