임베디드 용어 사전
최적화·저전력

인라인

함수 호출을 없애고 본문을 그 자리에 펼치는 최적화. 빨라지지만 코드 크기가 늘어난다.

호출 비용(분기·레지스터 저장·스택 조작)을 없앤다.

static inline uint32_t clamp(uint32_t v, uint32_t hi) { return v > hi ? hi : v; }

왜 빨라지나

  • 분기와 스택 조작이 사라진다
  • 상수 전파가 열린다 — 인자가 상수면 함수 내부 분기가 통째로 사라지기도 한다
  • 파이프라인 흐름이 끊기지 않는다

작은 함수일수록 이득이 크고, 큰 함수는 코드 크기만 늘고 캐시·플래시 접근이 나빠져 손해다.

힌트일 뿐 명령이 아니다

inline 키워드는 권고이고, 실제 판단은 컴파일러가 한다. 강제하려면 __attribute__((always_inline)), 막으려면 noinline 을 쓴다.

디버깅과의 상충

인라인된 함수는 브레이크포인트를 걸 수 없고 스택 트레이스에도 안 나온다. 그래서 디버그 빌드는 -O0/-Og, 릴리스는 -O2/-Os 로 나누되, 릴리스 구성으로 최종 검증하는 것이 원칙이다. 최적화 수준이 바뀌면 타이밍도 바뀐다.

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — 최적화 — 크기와 속도를 재고 줄인다