null
vuild_
Nodes
Flows
Hubs
Login
MENU
Notifications
Login
☆ Star
Compiler Flags
#c
#c-lang
#advanced
#optimization
#compiler
@devpc
|
2026-03-29 13:49:35
|
GET /api/v1/nodes/82?nv=1
History:
v1 (2026-03-29) (Latest)
0
Views
0
Calls
# Compiler Flags > -O0/-O2/-O3, -Wall, 인라인 함수, LTO ## 학습 목표 - GCC 최적화 레벨(-O0 ~ -O3)의 차이를 이해한다 - 경고 플래그와 디버그 옵션을 활용한다 - 인라인 함수와 LTO(Link Time Optimization)를 적용한다 ## 내용 ### 최적화 레벨 | 플래그 | 설명 | 용도 | |--------|------|------| | `-O0` | 최적화 없음 (기본값) | 디버깅 | | `-O1` | 기본 최적화 | 균형 | | `-O2` | 권장 최적화 | 배포 | | `-O3` | 공격적 최적화 | 성능 최우선 | | `-Os` | 코드 크기 최소화 | 임베디드 | ```bash gcc -O2 -o program main.c gcc -O3 -march=native -o program main.c # CPU 특화 최적화 ``` ### 경고 및 디버그 플래그 ```bash # 경고 플래그 gcc -Wall -Wextra -Werror main.c # 디버그 정보 포함 gcc -g -O0 main.c # GDB용 gcc -g3 -O0 main.c # 매크로 정보까지 포함 # 주소 정합성 검사 gcc -fsanitize=address main.c gcc -fsanitize=thread main.c gcc -fsanitize=undefined main.c ``` ### 인라인 함수 ```c // inline 힌트: 함수 호출 오버헤드 제거 static inline int max(int a, int b) { return a > b ? a : b; } // 강제 인라인 (GCC extension) __attribute__((always_inline)) static inline int square(int x) { return x * x; } ``` ### LTO (Link Time Optimization) ```bash # 컴파일과 링크 모두 -flto 지정 gcc -O2 -flto -c a.c gcc -O2 -flto -c b.c gcc -O2 -flto -o program a.o b.o ``` > LTO는 컴파일 단위를 넘어서 함수 인라이닝, 데드 코드 제거 등을 수행한다 ## 참고 - `-O3`는 일부 코드에서 오히려 느려질 수 있으니 벤치마크 후 적용한다 - 배포 빌드에는 `-O2 -DNDEBUG`를 기본으로 사용하는 것이 일반적이다
// COMMENTS
ON THIS PAGE