Optimization Order

최적화 순서

측정된 병목에 맞춰 시간 복잡도, 캐시 지역성, 동적 할당, 병렬화 중 효과가 큰 지점을 먼저 바꿉니다.

컴파일러-O2, -O3, LTO는 기본 성능을 올리지만 실제 효과는 프로파일링으로 확인합니다.
릴리스 기준디버그 빌드의 느림을 기준으로 코드를 바꾸면 실제 배포 성능과 어긋날 수 있습니다.
algorithm

복잡도 축소 기준

O(N^2)O(N log N)으로 바꾸는 효과는 미세 조정보다 큽니다.

cache

연속 메모리를 순차 접근합니다

std::vector처럼 공간 지역성이 높은 구조는 캐시 히트율을 높입니다.

allocation

반복 할당을 줄입니다

reserve(), 스택 객체, 메모리 풀로 작은 동적 할당의 누적 비용을 낮춥니다.

루프루프 불변 계산은 밖으로 빼고, 불필요한 임시 객체 생성을 줄입니다.
이동큰 객체 반환과 컨테이너 재배치에는 이동 시맨틱과 noexcept가 성능에 영향을 줍니다.
병렬화CPU 집약 작업은 분할할 수 있지만 동기화 비용과 false sharing을 함께 계산합니다.

측정 병목 최적화는 "빠르게 보이는 코드"가 아니라 측정으로 확인된 병목을 더 적은 연산, 더 나은 메모리 배치, 더 낮은 대기 시간으로 바꾸는 작업입니다.