프로그래밍/C,C++

코드 최적화 - 루프 내에서 반복 활용되는 변수 최적화

채윤아빠 2024. 7. 26. 22:55

개념

전역 변수나 static 변수는 메모리 계층에서 지역 변수보다 접근 비용이 높을 수 있으며, 컴파일러 최적화가 제한될 수 있습니다.

문제점

  • 전역/static 변수는 캐시 효율성이 낮을 수 있음
  • 컴파일러가 레지스터에 변수를 할당하기 어려움
  • 멀티스레딩 환경에서 메모리 동기화 오버헤드 발생 가능
  • 컴파일러의 최적화 기회 감소

최적화 방법

  1. 지역 변수로 복사: 루프 시작 전에 전역 값을 지역 변수로 복사
  2. 작업 완료 후 다시 저장: 모든 계산이 끝난 후 결과를 전역 변수에 한 번만 저장
  3. 변수 범위 최소화: 필요한 가장 좁은 범위에서만 변수 선언

예시

// 비효율적인 방법
for (int i = 0; i < 1000; i++) {
    global_total += data[i];
    global_count++;
}

// 최적화된 방법
int local_total = global_total;
int local_count = global_count;

for (int i = 0; i < 1000; i++) {
    local_total += data[i];
    local_count++;
}

global_total = local_total;
global_count = local_count;

성능 향상 이유

  • 지역 변수는 CPU 레지스터에 저장될 가능성이 높음
  • 메모리 접근 횟수 감소
  • 컴파일러가 더 적극적인 최적화 수행 가능
  • 캐시 지역성 향상

추가 고려사항

  • register 키워드는 현대 컴파일러에서 대부분 무시됨
  • 컴파일러 최적화 플래그(-O2, -O3 등) 활용
  • 변수 타입과 크기도 성능에 영향을 미침

맺는말

간단하지만 위와 같은 루프 내에서 반복 활용되는 변수 최적화를 적용하면 특히 임베디드 시스템, 게임 엔진, 고성능 서버 등 성능이 중요한 애플리케이션에서 큰 차이를 만들 수 있습니다. 하지만 항상 가독성과 유지보수성을 함께 고려해야 합니다.



728x90
반응형