Задать вопрос
@OrdUs

Влияет ли, передаёшь ты в функцию аргументы по ссылке или по значению, на производительность и память?

Просто интересно: если функция, допустим, будет только просматривать значения аргументов, но никак не будет изменять, есть смысл передавать их в функцию именно по ссылке ради уменьшения ресурсоёмкости программы, или это глупость? Типа когда ты передаёшь аргументы по значению, копию, во-первых, нужно создать, а во-вторых, копия занимает место. Но с другой стороны так вродь никто не делает.
Влиют ли тут типы данных? Может, например, на просто int без разницы, а вот передача по значению вектора из пары миллионов элементов затратна.

Вопрос касается не только C++, а в принципе всех языков программирования.
  • Вопрос задан
  • 211 просмотров
Подписаться 2 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Яндекс Практикум
    Разработчик C++ расширенный
    12 месяцев
    Далее
  • Яндекс Практикум
    Мидл разработчик С++
    4 месяца
    Далее
Решения вопроса 2
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
По ссылке дешевле во многих случаях. Ибо передача по значению создает копию. Поэтому передача большого вектора по значению будет очень дорогой.

В целом, в С++ хорошее правило - передавать большие переменные как const &.

Но для мелких типов, вроде int, передавать по ссылке может быть даже дороже, ибо и ссылка и значение тупо помещаются в регистр. Но ссылку надо будет еще разыменовывать, чтобы прочитать значение из памяти, а значение из регистра компилятор может даже не сохранять в память.

С другой стороны, компилятор может наоптимизировать и даже ссылка на int будет не дороже копии int.

Сразу говорить про все языки программиования нельзя. В некоторых языках вообще все передается по ссылке, в других вообще нет разницы для мелких типов.
Ответ написан
Комментировать
Если копию создавать дорого, то тогда передача по ссылке будет дешевле.
Если indirection и необходимость разыменования указателей дороже, чем созданние копии, то передача по значению будет дешевле.

Ссылка тоже занимает место, так что в случае int и других маленьких объектов (которые влезают в машинное слово) дешевле передавать значение (как по памяти, так и по времени).

Да и выделение/освобождение памяти в куче дороже, чем выделение/освобождение памяти на стеке. (зато меньше риск получить висячий указатель или stack overflow)

Хороший вопрос содержит половину ответа :)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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