/
https://42jerrykim.github.io/ _index.md
Profile-Guided Optimization의 3단계 워크플로우(Instrumented 빌드·프로파일 수집·Optimized 빌드), 프로파일 대표성과 PGO 전/후 검증, CI에서의 PGO 적용 시 캐시·재현성·비용 고려사항을 다룹니다. 언제 PGO를 쓸지/피할지 판단 기준을 제시합니다. AddressSanitizer, UBSan, ThreadSanitizer 등 주요 새니타이저의 동작 원리와 런타임 오버헤드를 정량적으로 비교하고, 디버그·CI 빌드와 릴리즈 빌드의 적용 전략, 성능 측정 시 새니타이저를 비활성화해야 하는 이유를 다룹니다. 디버그 심볼이 코드 생성과 바이너리 크기에 미치는 영향, -g와 최적화 플래그의 상호작용, 릴리즈 빌드에서 심볼 유지·분리(split DWARF) 전략, strip·FDO·LTO와 디버그 정보를 조합할 때의 주의점을 다룹니다. ccache·sccache로 재컴파일 감소, distcc 분산 빌드, -j와 메모리·캐시 균형, CI에서의 캐시 아티팩트·캐시 키·분산 전략을 다룹니다. LTO·PGO와 캐시 키 관계와 언제 ccache/distcc를 쓸지 판단 기준을 제시합니다. 성능 관련 컴파일러·정적 분석 경고(미사용 결과·불필요한 복사·비효율 루프), Clang Static Analyzer·GCC -fanalyzer, CI에 경고 통합하고 벤치마크와 분리해 성능 회귀와 연계하는 방법을 다룹니다. 컴파일 산출물 확인(-S, objdump, Godbolt), 함수 경계·호출 규약과 성능, hot 함수 형태·벡터화/루프가 어셈블리에서 드러나는 방식을 다룹니다. LTO 사용 시 최종 바이너리 확인 필요성과 인라인·SIMD·루프 언롤링 해석 방법을 제시합니다. 인라이닝이 되지 않는 원인(가시성, ODR/ABI, 코드 크기), GCC -fopt-info-inline·Clang -Rpass=inline 리포트 확인 방법, inline·LTO와 Tr.02(인라이닝 유도) 연계를 다룹니다. 진단 후 같은 TU·헤더 인라인·LTO로 대처하는 판단 기준을 제시합니다. 컴파일러 최적화 레벨 -O0~-Ofast의 의미와 켜지는 최적화 종류, -O2 vs -O3 trade-off, 릴리즈/디버그/프로파일 빌드 전략을 다룹니다. 언제 어떤 레벨을 쓸지 판단 기준과 측정 방법을 제시합니다. 컴파일러 intrinsics가 인라인 어셈블리를 대체하는 원리와 역할, SIMD·atomic·비트 조작 등 카테고리별 대표 함수, GCC/Clang/MSVC와 x86/ARM 플랫폼별 차이, 인라이닝·ABI·이식성 관점의 주의점을 다룹니다. Low-latency C++ 언어 최적화 트랙의 도입 챕터입니다. 이 트랙이 책임지는 범위와 경계를 명확히 하고, microbenchmark 기반 측정·검증 루프로 추상화 비용을 줄이는 흐름을 정리합니다. 학습 목표, 커리큘럼, 측정 도구 사용법, 선행·병행 트랙을 제시합니다.