Embedded C++ for Real Systems
Embedded C++ for Real Systems — 임베디드 모던 C++ 시리즈 소개
어디까지 C++를 써도 되는가? RAII, constexpr, no-exception 설계부터 lock-free 패턴까지. 임베디드에서 안전하게 C++를 쓰는 법.
임베디드 C++ vs C — 런타임·코드 크기·ABI 관점 비교
임베디드에서 C++가 진짜로 무거운가? 측정 가능한 비교와, C가 여전히 옳은 자리들.
임베디드 C++ 컴파일러 플래그 분석 — -fno-rtti·-fno-exceptions·-Os
C++를 임베디드 모드로 — -fno-exceptions, -fno-rtti, -Os, -flto. 각 플래그가 실제 바이너리에 무엇을 하는가.
임베디드 C++ 런타임 요구사항 — libstdc++·newlib·crt0 분석
C++ 코드가 돌기 위한 최소 런타임 — libstdc++, libsupc++, newlib, libgcc. 무엇이 진짜 필요한가.
C++ 코드 크기 분석 — 가상 함수·템플릿·예외 비용 추적
size, nm, objdump, bloaty — 어디서 어떤 크기가 오는지 측정하는 도구. bloat 추적의 표준 워크플로.
C++ ABI 호환성 — Itanium ABI·name mangling·vtable 레이아웃
C와 C++가 한 바이너리에서 살아남는 법 — name mangling, extern "C", calling convention, struct layout.
C++ 스타트업 코드 분석 — .init_array·전역 생성자 호출 순서
Reset에서 main까지 — vector table, .data 복사, .bss 초기화, __libc_init_array가 호출하는 C++ static 생성자.
임베디드 C++ 링커 스크립트 — vtable·정적 객체 배치 추적
MEMORY와 SECTIONS — Flash와 RAM에 C++ 객체와 코드를 정확한 위치에 두는 법.
임베디드 C++ 표준 선택 가이드 — C++11/14/17/20/23 트레이드오프
C++11/14/17/20/23 — 임베디드에서 어느 표준을 골라야 하나. 컴파일러 지원, 표준 라이브러리 변화, 핵심 기능 비교.
임베디드 RAII 기초 — 리소스 안전성과 결정적 소멸 보장
Resource Acquisition Is Initialization — 자원 생명주기를 객체 생명주기에 묶는 C++의 핵심 idiom.
임베디드 RAII 실전 패턴 — Lock·Pin·DMA·Power 관리
scoped_lock, unique_ptr with custom deleter, ScopedXxx, Finally — 임베디드에 자주 등장하는 RAII 표준 패턴.
constexpr 기초와 임베디드 적용 — 컴파일 타임 계산 활용
컴파일 타임 계산 — 런타임 코드와 데이터를 컴파일러가 미리 만들어줍니다. -Os보다 강력한 zero-cost.
constexpr 고급 활용 — 룩업 테이블·CRC·해시 컴파일 타임 생성
컴파일 타임 sort, search, 문자열 — constexpr 알고리즘의 한계와 가능성.
consteval과 constinit 분석 — C++20 컴파일 타임 강제 메커니즘
C++20의 컴파일 타임 강제 — consteval은 함수 호출을, constinit은 변수 초기화를 컴파일 타임에 강제합니다.
임베디드 Templates 기초 — 타입 안전과 코드 재사용 분석
함수 템플릿과 클래스 템플릿 — 컴파일 타임 다형성으로 type-safe + zero-cost generic 코드.
Template 비용 분석 — 코드 폭증·인스턴스화·디버그 정보 측정
Template instantiation의 코드 bloat — 추적, 통제, 공통 부분 분리 패턴.
CRTP 패턴 분석 — vtable 없는 정적 다형성
Curiously Recurring Template Pattern — virtual 함수 없이 컴파일 타임 다형성. vtable 0, 간접 호출 0.
Type Traits 임베디드 활용 — SFINAE·is_pod·컴파일 타임 검사
std::is_*, std::enable_if, SFINAE — 컴파일 타임 type 정보로 코드 분기와 검증.
C++20 Concepts 활용 — 템플릿 제약과 가독성 개선
Template 제약을 명시 — SFINAE의 가독성 개선, 에러 메시지 명확화, 자체 문서화.
동적 할당 없는 임베디드 C++ — placement new·정적 객체·풀
임베디드의 첫 번째 원칙 — new/malloc 없이 modern C++의 STL 같은 컨테이너 활용.
Custom Allocator 기초 — std::allocator 인터페이스 분석
STL allocator interface — 표준 컨테이너의 메모리 출처를 제어.
Pool Allocator 구현 — Fixed-Size Block과 O(1) 보장
고정 크기 블록 + free list — 임베디드의 표준 allocator 구현.
std::pmr 임베디드 활용 — Polymorphic Memory Resource 분석
C++17 polymorphic allocator — 같은 컨테이너 타입에 다른 메모리 출처 주입.
No-Exception C++ 설계 — 코드 크기·결정성 트레이드오프
-fno-exceptions 환경에서 에러 처리 — error code, std::optional, std::expected.
임베디드 에러 처리 패턴 — Result·errno·optional 비교
Result types, error chains, exception-free RAII — 실용적 에러 시스템 구축 패턴.
std::expected 분석 — C++23 결과 타입과 에러 전파
C++23의 Result type — Rust 같은 monadic 에러 처리, 예외 없이 풍부한 정보.
No-RTTI C++ 설계 — dynamic_cast 제거와 정적 타입 분기
-fno-rtti 환경에서 type info 없이 다형성 — enum tag, std::variant, CRTP.
임베디드 스마트 포인터 선택 — unique·shared·custom 비교
unique_ptr vs shared_ptr vs raw pointer — 임베디드의 소유권 모델 선택.
임베디드 C++ 소유권 모델 — single·shared·borrow 패턴
Owner, observer, borrower — 객체 lifetime의 명확한 책임 할당.
Intrusive Containers 분석 — 동적 할당 없는 컨테이너 설계
객체가 자기 next pointer 보유 — 동적 할당 없는 linked list와 tree.
ETL 라이브러리 분석 — Embedded Template Library의 STL 대체
Embedded Template Library — heap 없는 STL 대체, fsm, message router 포함.
임베디드 Lock-free 기초 — atomic·memory ordering·CAS
Atomic, CAS, memory order — mutex 없이 동시성. 임베디드의 ISR-safe 패턴.
Lock-free Container 구현 — SPSC Queue·Ring Buffer
SPSC queue, MPMC stack, ring buffer — lock-free 자료구조 구현 패턴.
Type-safe Flags 패턴 — Enum Class·Strong Typedef·Tag
enum class + bit operators — type-safe 비트 플래그. 의도하지 않은 변환 차단.
임베디드 State Machine 패턴 — Variant·Visitor·Table-driven 비교
타입 안전한 상태 머신 — enum + switch부터 std::variant, etl::fsm까지.
Compile-time FSM 구현 — 템플릿으로 상태 전이 검증
constexpr state machine — 컴파일 타임에 전이 검증, runtime 코드 0.
Singleton 대안 패턴 — Service Locator·Static Init·Phantom
임베디드의 DI 패턴 — Construct-On-First-Use, static dependency injection, service locator.
MMIO Register 추상화 — 타입 안전한 비트 필드 접근
MMIO를 type-safe하게 — volatile, bit field, register wrapper class.
GPIO 추상화 패턴 — Template·Concept으로 보드 독립성
GPIO pin = type — 컴파일 타임에 핀 설정 검증, runtime 비용 0.
Peripheral 추상화 — UART·SPI·I2C 공통 인터페이스 설계
UART, SPI, I2C — peripheral을 type-safe class로. Blocking, interrupt, DMA 패턴.
임베디드 HAL 설계 패턴 — Static·Dynamic·Hybrid 비교
범용 HAL 구조 — 벤더 종속성 격리, 다중 보드/MCU 지원, 시리즈 마무리.