Другие языки программирования и технологии

Какая разница, передавать в функцию объект или адрес объекта?

Что быстрее, эффективнее?
Быстрее передавать указатель/ссылку на объект (то, что ты называешь адресом) - это в подавляющем большинстве случаев намного меньше по объёму, чем сам объект.

А вот будет ли это эффективнее, зависит от множества факторов, среди которых и структура данного объекта, и особенности архитектуры данного процессора, и методы оптимизации кода, используемые данным компилятором...
Кахарман Тохниязов
Кахарман Тохниязов
56 511
Лучший ответ
Во-первых, зависит от языка: во многих языках объект равноценен ссылке, чтобы передать копию объекта его надо для начала клонировать ручками.
Ссылка в самом общем случае работает быстрее, а вот как будет эффективнее - зависит от конкретного алгоритма и тех оптимизаций, которые наворотит компилятор.
при неоднократном обращении к функции быстрее объект.
однако память увеличивается
Если умеешь адресовываться к функциям объекта (да и к данным) посредствам offset-а, то плодить сущности (передавать в функцию объект) смысла нет: захламишь память (особенно при рекурсивном вызове) и уменьшишь скорострельность. Поэтому, если можешь передавать адрес объекта и адресоваться посредствам него - делай через него
Ну и существенная разница состоит в том, что надо ли функции менять сам объект, или нет.
Если должен быть меняемый объект, при этом старый - сохраниться (что очень редко, но может быть), то тогда, конечно, только весь объект функции на вход. Но это крайне редко можно такое встретить.
С современными компиляторами практически никакой разницы.
Но в теоретически это должно влиять будет ли объект переносится из общей кучи на стек. работа со стеком для функции быстрее но сам перенос требует затрат ресурсов и сам стек не резиновый.
И в одном и в другом случае компилятор сам попытается угадать какое размещение будет эффективнее.
Денис Антипов
Денис Антипов
12 592