/
https://42jerrykim.github.io/ _index.md
C++20 Modules가 빌드 시간에 미치는 영향(헤더 반복 파싱 감소), 런타임 성능과의 관계(인라인·코드 생성), 점진적 모듈화와 기존 헤더 혼용 전략을 다룹니다. 컴파일러·버전별 모듈 지원과 도입 시 판단 기준을 제시합니다.
런타임 CPU 기능 감지에 따라 최적 구현을 선택하는 함수 멀티버저닝을 다룹니다. GCC/Clang의 target·target_clones 속성 사용법, IFUNC 디스패치 비용, AVX2/AVX-512 등 경로별 빌드·배포 설계와 검증 방법을 정리합니다.
동일 소스·플래그에서 GCC/Clang/MSVC의 속도·크기 차이, 벡터화·인라이닝·루프 최적화 영역별 차이, 플랫폼별 선택 기준을 다룹니다. 동일 벤치마크로 컴파일러별 수치 비교 방법과 다중 컴파일러 빌드·회귀 검증 절차를 제시합니다.
Low-latency 컴파일러·빌드 최적화 트랙의 도입 챕터입니다. 옵션 설계와 LTO/PGO, 인라이닝·코드 생성 분석의 책임 범위를 정리하고, 동일 벤치마크로 설정 변경을 검증하는 방법과 이 트랙을 마친 후 달성할 학습 목표를 안내합니다.
Link-Time Optimization 개념과 GCC/Clang/MSVC 활성화 방법, ThinLTO trade-off, LTO on/off 성능·크기 검증을 다룹니다. 크로스-TU 인라이닝과 빌드 캐시 연동 시 주의점을 포함합니다.
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에 경고 통합하고 벤치마크와 분리해 성능 회귀와 연계하는 방법을 다룹니다.