프로그래밍/C,C++

코드 최적화 - 구조체 변수 사용 시 체인 최소화하기

채윤아빠 2024. 7. 24. 16:28

개념

구조체 체인(chain)이란 obj->a.b.c.value와 같이 여러 단계의 구조체 멤버에 접근하는 것을 말합니다. 이러한 체인이 길어질수록 CPU는 각 단계마다 메모리 참조를 수행해야 하므로 성능 저하가 발생합니다.

문제점

  • 매 접근마다 전체 체인을 따라가야 함
  • 특히 루프 내에서 반복적으로 접근할 때 성능 저하가 심각해짐
  • 메모리 계층 구조에서 캐시 미스(cache miss)를 증가시킴

최적화 방법

  1. 포인터 캐싱: 자주 접근하는 깊은 구조체 멤버의 주소를 로컬 포인터 변수에 저장
  2. 임시 변수 사용: 값을 자주 읽고 쓰는 경우 로컬 변수에 복사하여 작업 후 다시 저장

최적화 예시

// 비효율적인 방법
for (int i = 0; i < 1000; i++) {
    object->department.employee.salary += bonus[i];
}

// 최적화된 방법
int* salary_ptr = &object->department.employee.salary;
for (int i = 0; i < 1000; i++) {
    *salary_ptr += bonus[i];
}

성능 향상 이유

  • 메모리 주소 계산을 한 번만 수행
  • 포인터를 통한 직접 접근으로 중간 단계 참조 제거
  • 캐시 지역성(cache locality) 향상

추가 고려사항

구조체 체인 최소화하기

  • 자주 접근하는 데이터 구조는 평면화(flattening)하는 것을 고려
  • 데이터 지역성을 고려한 구조체 설계
  • 핫 패스(hot path)에서는 특히 체인 최소화에 주의

맺는말

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



728x90
반응형