Означает ли это, что если foo имеет тип float, то более эффективно просто передавать foo по значению?
Передача поплавка по значению может быть более эффективной. Я ожидал бы, что это будет более эффективно - отчасти из-за того, что вы сказали: float меньше указателя на систему, которую вы описываете. Но, кроме того, при копировании указателя вам все же нужно разыменовать указатель, чтобы получить значение внутри функции. Косвенная ссылка, добавленная указателем, может существенно повлиять на производительность.
Разница в эффективности может быть незначительной. В частности, если функция может быть встроена и оптимизация включена, то, вероятно, не будет никакой разницы.
Вы можете узнать, есть ли какой-либо прирост производительности от прохождения поплавка по значению в вашем случае путем измерения. Вы можете измерить эффективность с помощью инструмента профилирования.
Вы можете заменить указатель ссылкой, и ответ будет по-прежнему применяться одинаково хорошо.
Есть ли какие-то накладные расходы при использовании ссылки, как это происходит, когда указатель должен быть разыменован?
Да. Вполне вероятно, что ссылка имеет те же характеристики производительности, что и указатель. Если можно написать семантически эквивалентную программу, используя либо ссылки, либо указатели, они, вероятно, собираются создать идентичную сборку.
Если проходит небольшой объект по указателю будет быстрее, чем скопировать его, то, конечно, это было бы верно, для объекта одинакового размера, не вы согласны? Как насчет указателя на указатель, то есть размер указателя, не так ли? (Это точно такой же размер.) О, но указатели тоже объекты. Итак, если передача объекта указателем (например, указателем) быстрее, чем копирование объекта (указатель), то передача указателя на указатель на указатель на указатель ... указателю будет быстрее, чем прогарма с меньшим количеством указателей, которые все еще быстрее, чем тот, который не использовал указатели ... Перхап мы нашли здесь бесконечный источник эффективности :)
Вы должны измерить его. Размер предмета, на который делается ссылка/копирование, - это не единственное, что входит в игру. – juanchopanza
http://stackoverflow.com/questions/21605579/how-true-is-want-speed-pass-by-value –
Вкратце: почти всегда более эффективно передавать собственные типы (int, float, double) на чем по ссылке. Не только потому, что указатель - в большинстве случаев - больше или больше, чем собственный тип данных, но также и потому, что оптимизатору гораздо труднее оптимизировать опорные параметры, чем значения параметров. – MikeMB