Какой подход лучше, с точки зрения производительности - PullRequest
0 голосов
/ 14 октября 2018

Допустим, у нас есть очень простой алгоритм, который проверяет максимум между 2 числами:

(1)

#include <iostream>

using namespace std;

int max(int* a, int* b) {
  return (*a > *b ? *a : *b);
}

int main() {
  int a, b;

  cin >> a >> b;
  cout << max(&a, &b) << endl;

  return 0;
}

(2)

#include <iostream>

using namespace std;

int max(int a, int b) {
  return (a > b ? a : b);
}

int main() {
  int a, b;

  cin >> a >> b;
  cout << max(a, b) << endl;

  return 0;
}

Будетбыть первым случаем (1) быстрее, чем вторым случаем (2), так как он не создает копию переменных a и b внутри функции?Я понимаю, что для этого конкретного примера разница во времени выполнения практически отсутствует, но я буду рад узнать, будет ли большая разница, когда речь идет о сложных функциях и передаваемых данных.

1 Ответ

0 голосов
/ 14 октября 2018

Поскольку int встроены в типы, если нет встраивания, то использование указателей на int будет медленнее, чем их непосредственное использование.int s дешевы для копирования, и их хранение не требует больших затрат, чем указатель, но указатель потребует разыменования перед использованием данных.

Так что в этомВ случае max компилятор, вероятно, напишет тот же код (попробуйте godbolt.org), но для более сложных функций, или если функция находится в другом модуле компиляции и вы не используете оптимизацию по времени компоновки, вы увидитеразница в скорости.Иногда.

Конечно, если это больше, чем int, то это будет зависеть.Вам придется измерить (обычно два указателя в порядке, вот что string_view "есть").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...