C++ 최적화 우선순위

최적화 병목 분석

코드 최적화는 미세 문법보다 병목 원인에 맞는 선택이 중요하다. 먼저 복잡도를 낮추고, 그다음 불필요한 할당과 복사, 메모리 접근 패턴을 측정으로 확인한다.

01

측정

프로파일러와 벤치마크로 실제 느린 지점을 찾는다.

감으로 시작 금지
02

복잡도

O(n^2)를 O(n log n)이나 O(n)으로 바꿀 수 있는지 먼저 본다.

가장 큰 효과
03

메모리 비용

반복 할당, 불필요한 복사, 임시 string 생성을 줄인다.

reserve/move/view
04

하드웨어

캐시 locality, branch, vectorization, false sharing을 병목별로 검토한다.

측정 기반
자료구조
연산 패턴에 맞게 선택 조회가 많으면 hash, 순서가 필요하면 tree, 순회가 많으면 vector를 우선 검토한다.
컨테이너 선택
copy
값 이동과 view 사용 큰 객체는 const&, string_view, move로 의도와 수명을 맞춘다.
dangling
allocation
반복 루프 밖으로 이동 reserve, object pool, reuse buffer로 할당 빈도를 줄인다.
프로파일 확인
branch/cache
데이터 배치 개선 핫 데이터와 콜드 데이터를 분리하거나 연속 저장으로 cache miss를 줄인다.
SoA 후보

가독성 · 정확성 · 회귀 점검

가독성 측정 없는 난해한 최적화가 유지보수 비용만 늘리지 않는지 본다.
정확성 빠른 경로가 예외, 경계값, overflow를 바꾸지 않는지 테스트한다.
회귀 성능 기준선을 자동 벤치마크나 기록으로 남긴다.