TIL/2025

Compiler Extension & Builtin Function

고무 오리 2025. 4. 22. 18:30
728x90
📢 c++ 코드를 보는데 표준 문법이 아닌 것들(__attribute__, __builtin_xx ...)이 보여 무엇인지 알아봤어요

 

 

🧐 왜 사용하지?

부족한 표준 언어(c/c++)의 디테일을 보완해주는 기능이에요

표준 언어(c/c++)가 제공하지 못하는 "의도 명확화, 시스템 제어, 최적화"를 가능하게 해주죠

__builtin_xx 가 내장 함수(Builtin Function), 나머지는 컴파일러 확장(Compiler Extension)이에요

 

 

💻 어떤 상황에서 주로 쓰나?

위쪽에 있을수록 더 빈번하게 사용돼요

분류 대표  키워드 용도 사용 이유 (목적)
① 최적화 힌트 __builtin_expect,
__restrict__,
CPU 분기 예측 / 메모리 alias 최소화 성능 튜닝 및 병렬 최적화 (예: 루프 안 조건 분기)
② 함수 속성 제어 __attribute__((noreturn)),
__attribute__((interrupt)),
__noreturn__
함수 성격 명시 컴파일러 최적화 유도 + 경고 제거 + ISR 정의 등
③ 메모리 제어 / 위치 지정 __attribute__((section)),
__attribute__((aligned)),
__attribute__((used))
함수·변수의 섹션 배치 및 정렬 부트로더, 메모리 맵, DMA 연계에서 중요
④ 하드웨어 직접 접근 / 인라인 어셈블리 __asm__,
asm volatile,
__volatile__
특수 레지스터 접근, 명령어 직접 삽입 드라이버, context switch, IRQ 제어
⑤ 구조체 정렬 제어 __packed__,
__aligned__
구조체 크기 최적화, 하드웨어 맵핑 패딩 제거, 하드웨어 레지스터 대응
⑥ 기본 함수 대체/우선순위 설정 __attribute__((weak)),
__attribute__((alias))
약한 심볼 정의, 기본 구현 제공 링크 타임에 override 허용 (ISR default 등)
⑦ 컴파일 타임 판단 / 상수 조건 처리 __builtin_constant_p,
__builtin_is_constant_evaluated()
상수 여부 판별 매크로 조건 분기, constexpr 조건 제어
⑧ 프로그램 종료/중단 유도 __builtin_trap(),
__builtin_unreachable()
예외 발생, undefined instruction 안전 시스템의 비상 종료, static analyzer 보조
⑨ 인라인 제어 / 호출 방식 변경 __inline__,
__attribute__((always_inline)),
__attribute__((noinline))
인라인 여부 강제 코드 사이즈 제어, 호출 오버헤드 튜닝
⑩ 함수 호출 방식/인자 전달 방식 지정 __attribute__((fastcall)),
__attribute__((cdecl))
함수 호출 규약 변경 특수 ABI에 맞춤, 인터럽트 호출 속도 최적화
⑪ C/C++ 링커 인터페이스 extern "C" 이름 맹글링 제거 C 함수와 C++ 함수의 상호 운용성 확보
⑫ 분석 도구 힌트 / 경고 억제 __attribute__((unused)),
__attribute__((nonnull))
사용되지 않음 경고 제거, 정적 분석 힌트 Lint, Polyspace, MISRA 대응에 유용

 

 

이렇게 컴파일러 확장과 내장 함수는 표준 언어의 부족함을 보완해주는 실전 개발 무기에요!

728x90