170 похожих чатов

Неуверен, вопрос этот в @supapro или сюда задавать, но всё

же спрошу здесь (если что-то скажите, тогда)

Почему не стоит всегда передавать параметры в функцию по константным ссылкам; говорят, простые типы лучше передавать by value (провоцируя копирование). Вроде как дело в том, что передача по значению позволяет компилятору произвести некоторые оптимизации. Говорится, что в передаче по ссылке её еще надо разыменовывать, но разве ссылки это не compile-time фича, когда адрес объекта по ссылке подставляется на этапе компиляции?

В общем вопрос: что за оптимизацию производит компилятор в передачах по значению и откуда берется оверхэд на разыменование ссылок.

2 ответов

13 просмотров

void f(const int& param) { return param + param; } -> lea edi, [esp-x] call f mov eax, [edi] //deref add eax, [edi] //deref ret void f(int param) { return param + param; } -> mov edi, [esp-x] //deref call f lea eax, [edi + edi] ret

By value рекомендуется передавать параметры, которые достаточно малы и помещаются на стек или в регистры процессора. Обычно передача по ссылке или значению влияет только на не-inline методы. Компилятор не может проводить inline оптимизацию там, где он не имеет права нарушать ABI.

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
А можно вопрос? Мне сегодня сказали что у меня функция (которая просто заполняет массив значениями) не правильная void Full(double * arr, int n) { for (int i = 0; i < n; i...
† C E †
7
День добрый, подскажите пожалуйста, есть ли какой-то способ сказать ребару не компилировать определённое приложение? Всю доку их перечиатл ничего подобного не нашёл
Кирилл
14
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
10
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Здравствуйте, хочу сделать HelloWorld в консоли Дельфи, но функция API ничего не выводит, что я делаю не так? program Hello; {$APPTYPE CONSOLE} uses System.SysUtils, WinAPI.Wi...
Sergey Vinogradov
20
Карта сайта