Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 i++와 ++i의 차이점과 성능 비교

C++에서 i++(후위 증가 연산자)와 ++i(전위 증가 연산자)는 최종적으로 변수 i의 값을 1씩 늘린다는 점에서 결과는 동일합니다. 하지만 동작 순서에는 중요한 차이가 있습니다.

  • i++ (후위 증가): 현재 값을 먼저 사용(할당)한 뒤, i의 값을 1 증가시킵니다.
  • ++i (전위 증가): i의 값을 먼저 1 증가시킨 뒤, 증가된 값을 사용(할당)합니다.

아래 예제 코드를 통해 그 차이를 직접 확인해 보겠습니다.

예제 코드

#include<iostream>
using namespace std;
int main() {
   int x = 3, y, z;
   y = x++;  // y에 x의 기존 값(3)을 대입한 후 x는 4가 됨
   z = ++x;  // x를 먼저 5로 증가시킨 후 z에 대입
   cout << x << ", " << y << ", " << z;
   return 0;
}

실행 결과

5, 3, 5

이처럼 두 연산자는 같은 작업을 수행하지만 처리 순서가 다릅니다. 그렇다면 자연스럽게 이런 의문이 생깁니다. 두 연산자 사이에 성능 차이가 존재할까요?

성능은 아키텍처에 따라 달라집니다

이 연산들의 실제 성능은 실행되는 하드웨어 아키텍처에 크게 의존합니다. 어느 쪽이든 결국 메모리에 저장된 값을 읽고 증가시킨 후 다시 저장하는 작업이 필요하므로, 폰 노이만 병목(Von Neumann bottleneck)이 두 경우 모두에서 성능의 제한 요소로 작용합니다.

그래도 ++i가 약간 더 빠릅니다

일반적으로 ++ii++보다 약간 더 빠르다고 말할 수 있습니다. 그 이유는 다음과 같습니다.

  • i++는 값을 증가시키기 전에 원래 값의 임시 복사본(temporary copy)을 생성해야 합니다.
  • ++i는 이러한 임시 복사본 없이 바로 값을 증가시키므로 불필요한 오버헤드가 없습니다.

컴파일러가 이 차이를 인식하고 코드를 최적화해 주는 경우도 있습니다. 예를 들어 증가된 값이 이후에 사용되지 않는 단순 문장(i++; 또는 ++i;)에서는 대부분의 컴파일러가 동일한 기계어 코드를 생성합니다. 하지만 이러한 최적화가 항상 적용되는 것은 아니며, 모든 컴파일러와 모든 상황에서 유효한 것도 아니기 때문에 성능이 중요한 코드, 특히 반복문이나 C++ 객체·반복자(iterator)를 다룰 때는 ++i를 사용하는 것이 안전하고 효율적인 습관입니다.