Имеет ли возвращающая функция больше производительности, чем невозвратная? - PullRequest
1 голос
/ 14 октября 2019

Я в ситуации, когда возвращать значение из функции необязательно. Так что, возвращаю я или не возвращаю, логически не имеет значения, но могу ли я смело предположить то же самое в отношении производительности?

Я имею в виду, есть ли издержки производительности (время или память) , когда мы используем функцию, которая возвращает некоторое значение (например, Int) над функцией, которая возвращает void?

Это фиктивный проект, и из моего любопытства поднимается вопрос.

1 Ответ

1 голос
/ 14 октября 2019

Это зависит от используемого ABI и встроенной вызываемой функции.

На платформах x86_64 с Двоичный интерфейс приложения System V AMD64 (Linux, FreeBSD, macOS, Solaris и Windows Subsystemдля Linux) возвращаемые значения с sizeof длиной до 16 байт возвращаются в регистрах. Возврат до 16 байтов включает загрузку возвращаемого значения в один или два 8-байтовых регистра. Возврат больших значений требует хранения в стеке вызывающей стороны через скрытый указатель возвращаемого значения, передаваемый вызываемому объекту, который также должен быть загружен в регистр rax по возвращении.

См. Соглашения о вызовах от Agner Fog для подробного рассмотрения соглашений о вызовах, в частности §7.1. Передача и возврат объектов. Существуют отдельные соглашения о вызовах для передачи типов SIMD в регистрах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...