CppCoreGuidelines говорит, что быстрее передавать мелкие объекты (до двух или трех слов) по значению, чем по ссылке, из-за некоторых накладных расходов, необходимых для доступа к функции. Можете ли вы объяснить мне, каковы именно накладные расходы в этом случае?Почему быстрее передавать int по значению, чем по ссылке?
ответ
Накладные расходы заключаются в том, что такие ссылки включают косвенное обращение, которое обычно выполняется за кулисами с помощью указателя. Таким образом, у вас есть операция разыменования, вес которой не суммируется с какой-либо заметной выгодой для такого небольшого объема данных.
страница связывание буквально объясняет это:
При копирование дешево, ничто не сравнится простотой и безопасности копирования, так и для небольших объектов (до двух или трех слов) также быстрее передавая по ссылке, потому что не требует дополнительной косвенности для доступа к функции.
Я видел это, но ожидал увидеть более аргументированный ответ (инструкции ассемблера, подсчет байтов и т. Д.). – logumanov
@logumanov: Я не совсем понимаю, какая дополнительная аргументация вам нужна, и нам не нужно вдаваться в такие детали реализации на низком уровне, чтобы знать, что косвенность имеет стоимость, и вы не берете на себя стоимость, когда вы ничего не получают взамен. –
@logumanov: Как я уже говорил в другом месте, вопрос был слишком расплывчатым. Вы буквально разместили ссылку на объяснение, и ваш вопрос сводился к: «Я этого не понимаю». Вопрос о технических деталях, конечно же, приветствуется в Stack Overflow, но вам нужно на самом деле * спросить их с тем же вниманием к деталям! :) –
Документ также дает вам объяснение - вы вводите дополнительную косвенность. По крайней мере, вам нужно разыменовать указатель, который вам не нужен. В нем также объясняется, какие подходы бывают быстрыми и медленными (и почему).
Это не значит, что вы обязательно заботитесь - если вы не находитесь в горячей части вашего кода, разница на самом деле не имеет значения.
Обратите внимание, что до тех пор, пока ваш код будет const-correct и до тех пор, пока вы включите некоторую оптимизацию (что вам нужно, если вы вообще не заботитесь о производительности), компилятор почти наверняка оптимизирует такие вещи. На практике реальные накладные расходы - это потраченное время, пытаясь «оптимизировать» мелочи, которые уже оптимизирует компилятор. – 0x5453
- 1. Почему возвращение по ссылке быстрее, чем возврат по значению?
- 2. Пройти по значению быстрее, чем пройти по ссылке
- 3. C++ 64 бит int: передавать по ссылке или передавать по значению
- 4. Пропустить int по ссылке const или по значению, любую разницу?
- 5. Функция Передавать по ссылке
- 6. PHP: Передавать по ссылке
- 7. Проходит по ссылке (вектор указателей на объект) быстрее, чем проходит по значению?
- 8. C++ лямбда, вызов функции функции по значению быстрее, чем по ссылке
- 9. Должны ли переменные конструктора передавать по ссылке или значению?
- 10. «&» и Передавать по ссылке
- 11. Могу ли я позволить компилятору C++ решить, следует ли передавать по значению или передавать по ссылке?
- 12. Передача контейнеров по значению или по ссылке
- 13. Передайте по ссылке ИЛИ по значению
- 14. Java Передавать по ссылке междунар
- 15. Причины не передавать простые типы по ссылке?
- 16. Выгода от передачи int по ссылке vs по значению?
- 17. Delphi массив Передавать по ссылке
- 18. Передача массивов по значению и по ссылке
- 19. Правило большого пальца при прохождении по значению быстрее, чем передача по ссылке const?
- 20. Передать по ссылке более дорогостоящий, чем передать по значению
- 21. Передача по ссылке или по значению по значению Java
- 22. путают параметры по значению и по ссылке
- 23. Передача функции по ссылке или по значению?
- 24. Вызвать по ссылке или позвонить по значению
- 25. Ruby - передача по значению или по ссылке
- 26. Python - по значению vs по ссылке
- 27. Передавать по ссылке - Ruby Modules
- 28. Javascript - передавать объекты по ссылке
- 29. Javascript Передавать по ссылке обходного
- 30. C++ передается по ссылке или по значению?
Очень связанный: http://stackoverflow.com/questions/26387569/rule-of-thumb-for-when-passing-by-value-is-faster-than-passing-by-const-referenc – NathanOliver
I ' м, чтобы закрыть этот вопрос, потому что непонятно, что вы спрашиваете, поскольку точная ссылка, которую вы даете, содержит точный ответ на вопрос: * «Что« дешево копировать »зависит от архитектуры машины, но два или три слова (двойники, указатели, ссылки) обычно лучше всего передаются по значению. * «Если вы не понимаете, например, какие слова или почему машинная архитектура влияет на это правило, тогда вы должны перефразировать вопрос. –