Link Time Optimization. 파일 경계를 넘어서 최적화한다.
일반 컴파일 파일 하나씩 최적화 → 다른 파일의 함수는 블랙박스
LTO 링크 때 전체를 보고 인라인·제거·상수 전파
얻는 것
- 안 쓰는 함수·데이터가 실제로 제거된다(
-ffunction-sections -fdata-sections -Wl,--gc-sections와 함께) - 작은 함수가 호출 없이 인라인된다
- 상수가 전파돼 분기가 통째로 사라진다
크기가 10~30% 줄어드는 경우가 흔하다.
대가
빌드가 느려진다
디버깅이 어려워진다 인라인돼 사라진 함수는 브레이크포인트를 못 건다
숨어 있던 미정의 동작이 드러난다 최적화가 세지면서 동작이 바뀐다
마지막 항목이 중요하다. LTO 를 켰더니 깨졌다면 대개 코드에 원래 문제가 있다 —
volatile 누락, 엄격한 앨리어싱 위반, 초기화 안 된 변수 같은 것들이다.
그래서 켤 때는 켜고 끈 상태를 모두 시험하고, 릴리스 구성으로 고정한 뒤 그것으로 검증한다.