Для объектов или примитивных данных с размером, равным или меньшим, чем размер указателя, наиболее эффективный метод передачи функции будет определенно по значению, но я хочу знать, есть ли какой-либо инструмент, способный определять лучший метод прохождения объектов классов или примитивных данных с размерами, большими, чем размер указателя на функции на платформе, как что-то из инструментов повышения?Любой инструмент для определения наиболее эффективного способа передачи данных по ссылке или по значению?
ответ
Да, этот инструмент является компилятором. Передайте по ссылке, и если оптимизатор замечает, что он может уйти с сохранением копии объекта вместо адреса для объектов, размер которых меньше или равен адресу адреса, тогда он может это сделать. Это, вероятно, лучший подход для шаблонного кода, где вы не можете быть уверены, что ваши параметры являются большими или маленькими объектами - просто используйте ссылки в любом случае.
Компилятор не гарантирован или не требуется для оптимизации, но если это не так, это, вероятно, небрежное достижение производительности, так что не стоит беспокоиться.
Это может работать и наоборот: если вы передадите по значению, компилятор также сможет выполнить копирование, исключая копию. Таким образом, в любом случае, компилятор попытается сделать ваш код быстрым. :) – jalf
Хороший момент, не понимал, что - но стоимость оптимизации не происходит выше, чем наоборот. Если очень большой объект передается по значению, может произойти серьезное поражение производительности, но если небольшой объект передается по ссылке, это, вероятно, ничего. Так что я бы предпочел пошаговую ссылку. – AshleysBrain
Существует несколько сценариев, в которых вы обязательно захотите пройти по значению: http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/ –
Да, Boost имеет то, что называется call traits. Но его высокая стоимость нечитаемости выше, чем микроскопический выигрыш в эффективности. По моему скромному мнению.
Приветствия & НТН.,
Спасибо за ссылку. Теперь я знаю, что означает «лучший метод» :-). –
Если вы не находитесь в критической секции, это астрономически маловероятно разыменования указателя является узким местом вашего приложения, и если вы находитесь в критической секции, то лучше смотреть на кэш товарищеского алгоритмов, так что вам не придется много платить за разыменование.
Короче говоря, передайте что-либо большее, чем размер указателя по ссылке/указателю, и только заботитесь о производительности, когда вы знаете, что вам нужно заботиться. Преждевременная оптимизация - это корень всего зла.
- 1. Алгоритм для поиска наиболее эффективного способа отправки данных по отдельности
- 2. Эксплуатационная стоимость передачи по значению по ссылке или указателем?
- 3. Передача контейнеров по значению или по ссылке
- 4. Выявление наиболее эффективного способа для настраиваемого сервера базы данных (PHP)
- 5. Передача по ссылке или по значению по значению Java
- 6. Результат передачи WinForm по ссылке и значению
- 7. Возвращение по ссылке или по значению. C++
- 8. C++ передается по ссылке или по значению?
- 9. Передайте по ссылке ИЛИ по значению
- 10. RMI: Передайте по значению или по ссылке?
- 11. Вызвать по ссылке или позвонить по значению
- 12. Массивы передаются по ссылке или по значению
- 13. Ruby - передача по значению или по ссылке
- 14. с # по ссылке или по значению
- 15. Передача функции по ссылке или по значению?
- 16. Выгода от передачи int по ссылке vs по значению?
- 17. Обработка данных по ссылке или по значению в python
- 18. С - Pass по значению и передачи по ссылке несогласованность
- 19. Аргументы переданы методам по ссылке или значению?
- 20. Java для цикла по значению или по ссылке
- 21. Стиль кодирования - перейдите по ссылке или перейдите по значению?
- 22. Любой простой способ определить, работают ли функции по ссылке или по вызову по значению?
- 23. C# параметры передачи по ссылке
- 24. Параметры передачи клена по ссылке
- 25. Функция передачи по ссылке
- 26. Ошибка передачи по ссылке?
- 27. C++: причины для передачи объектов по значению
- 28. Схема передачи по ссылке
- 29. Передать перечисления по значению или ссылке?
- 30. Передать перечисление функции - по значению или по ссылке?
Профилировщик или микропрофилер? – Necrolis
@ Necrolis_How'd он способен выполнять работу? – Pooria