>백엔드 개발 >C++ >C++ 함수 매개변수 전달 방법이 프로그램 성능에 미치는 영향

C++ 함수 매개변수 전달 방법이 프로그램 성능에 미치는 영향

WBOY
WBOY원래의
2024-04-12 21:51:021213검색

C++에서 함수 매개변수는 값(함수에 전달하기 위한 복사본 생성) 또는 참조(원래 변수의 주소 전달)로 전달될 수 있습니다. 값을 전달하는 것은 안전하지만 비용이 많이 들고 작은 매개변수나 원래 변수를 보호해야 하는 경우에 적합합니다. 참조 전달은 빠르지만 유연성이 낮고 큰 개체나 원본 변수를 수정해야 하는 상황에 적합합니다. 실험에 따르면 대규모 배열을 처리할 때 참조로 전달하는 것이 값으로 전달하는 것보다 성능이 크게 향상되는 것으로 나타났습니다.

C++ 函数参数传递方式对程序性能的影响

C++ 함수 매개변수 전달 방식이 프로그램 성능에 미치는 영향

C++에서는 함수 매개변수를 값 또는 참조로 전달할 수 있습니다. 다양한 매개변수 유형의 경우 프로그램 성능에 큰 영향을 미치므로 적절한 전달 방법을 선택하는 것이 중요합니다.

값으로 전달

값으로 전달에서는 함수 매개변수의 복사본이 함수에 전달됩니다. 복사본을 변경해도 원래 변수 값에는 영향을 미치지 않습니다. 값으로 전달하면 안전성이 높아지지만 큰 개체를 전달할 때는 매개 변수를 만들고 복사해야 하므로 오버헤드가 발생합니다. 다음 코드 예제에서는 값으로 전달하는 방법을 보여줍니다.

void foo(int num) {
  num++;  // 值传递副本,不会影响原始变量
}

int main() {
  int x = 5;
  foo(x);
  cout << x << endl; // 输出5,没有改变
}

참조로 전달

참조로 전달에서는 함수 매개변수의 참조가 함수에 전달됩니다. 이는 함수가 원래 변수의 주소를 수신한다는 의미입니다. 참조를 변경하면 원래 변수 값에 직접적인 영향을 미칩니다. 참조에 의한 전달은 매개변수 복사가 필요하지 않기 때문에 값에 의한 전달의 오버헤드를 제거하지만 참조가 가리키는 변수의 수정이 허용되지 않기 때문에 유연성이 희생됩니다. 다음 코드 예제는 참조에 의한 전달을 보여줍니다.

void foo(int& num) {
  num++;  // 引用传递引用,更改原始变量
}

int main() {
  int x = 5;
  foo(x);
  cout << x << endl; // 输出6,已改变
}

선택적 전달 방법

상황에 따라 가장 적합한 전달 방법을 선택합니다.

  • 값에 의한 전달: 원본 변수가 수정되지 않도록 보호해야 하는 경우 함수, 또는 인수가 작은 값인 경우.
  • 참조로 전달: 매개변수가 큰 개체이거나 함수가 원래 변수를 수정해야 하는 경우.

실제 사례

다음 예에서는 배열을 값으로 전달하고 함수에 참조를 전달할 경우 프로그램 성능을 비교합니다.

#include <chrono>
#include <vector>

int sum_array_by_value(const std::vector<int>& arr) {
  int sum = 0;
  for (int i : arr) {
    sum += i;
  }
  return sum;
}

int sum_array_by_reference(std::vector<int>& arr) {
  int sum = 0;
  for (int& i : arr) {
    sum += i;
  }
  return sum;
}

int main() {
  std::vector<int> arr(1000000);
  for (int i = 0; i < arr.size(); i++) arr[i] = i;

  auto start = std::chrono::high_resolution_clock::now();
  int sum1 = sum_array_by_value(arr);
  auto end = std::chrono::high_resolution_clock::now();
  int elapsed1 = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();

  start = std::chrono::high_resolution_clock::now();
  int sum2 = sum_array_by_reference(arr);
  end = std::chrono::high_resolution_clock::now();
  int elapsed2 = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();

  std::cout << "Sum by value: " << elapsed1 << " ms" << std::endl;
  std::cout << "Sum by reference: " << elapsed2 << " ms" << std::endl;

  return 0;
}

이 프로그램을 실행하는 동안 참조로 전달을 사용하면 성능이 크게 향상되는 것을 확인할 수 있습니다. 큰 배열은 복사할 필요가 없기 때문입니다.

위 내용은 C++ 함수 매개변수 전달 방법이 프로그램 성능에 미치는 영향의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.