Size: a a a

2021 February 10

AV

Alexey Veselovsky in Ada
эмм... подобные штуки вообще инлайниться должны. то есть там не должно быть вызова функций в принципе
источник

AV

Alexey Veselovsky in Ada
если тип маленький (какой-нибудь int), то вызывать функцию с тем, чтобы поменять по УКАЗАТЕЛЮ один из аргументов -- дофига дорого
источник

МР

Максим Резник... in Ada
Да какая разница как передавать. Если один код делает копию, а другой нет, то второй и будет быстрее работать
источник

AV

Alexey Veselovsky in Ada
не обязательно
источник

AV

Alexey Veselovsky in Ada
int calculate(int) будет точно не медленней, чем void calculate(int*)
источник

AV

Alexey Veselovsky in Ada
точнее -- первый вариант будет быстрее
источник

AV

Alexey Veselovsky in Ada
иногда - существенно
источник

OV

Oleg Volkov in Ada
Это почему?
источник

OV

Oleg Volkov in Ada
куча - стек
источник

OV

Oleg Volkov in Ada
?
источник

AV

Alexey Veselovsky in Ada
потому, что первое - будет туда-сюда через регистры гонять, а второе -- будет бегать по памяти + компилятор не сможет ничего адекватно соптимизировать так как возможен алиасинг.
источник

OV

Oleg Volkov in Ada
Ага только ты не учитываешь
источник

OV

Oleg Volkov in Ada
Что результат то все равно кудато придется сложить в итоге
источник

AV

Alexey Veselovsky in Ada
причем первый вариант, в случае инлайна вообще отлично интегрируется в вызывающий код, а второй вариант -- говно.
источник

AV

Alexey Veselovsky in Ada
Oleg Volkov
Что результат то все равно кудато придется сложить в итоге
в регистр очередной :-)
источник

МР

Максим Резник... in Ada
Alexey Veselovsky
int calculate(int) будет точно не медленней, чем void calculate(int*)
Там же написано "для сложных типов"!  А если и функция достаточно сложная чтобы компилятор не смог ее заинлайнить, тогда он не сможет соптимизировать лишнее копирование
источник

AV

Alexey Veselovsky in Ada
плюс int сам по себе банально меньше чем указатель :-)
источник

OV

Oleg Volkov in Ada
Alexey Veselovsky
в регистр очередной :-)
Ага , остобенно если это элемент массива из 100500 элементов
источник

AV

Alexey Veselovsky in Ada
так что данных гонять во втором случае придется не меньше
источник

AV

Alexey Veselovsky in Ada
Максим Резник
Там же написано "для сложных типов"!  А если и функция достаточно сложная чтобы компилятор не смог ее заинлайнить, тогда он не сможет соптимизировать лишнее копирование
если "сложный тип" это что-то типа struct T {int a, b;}; -- то аналогично всё
источник