본문으로 건너뛰기
1

Embedded C++ for Real Systems — 임베디드 모던 C++ 시리즈 소개

어디까지 C++를 써도 되는가? RAII, constexpr, no-exception 설계부터 lock-free 패턴까지. 임베디드에서 안전하게 C++를 쓰는 법.

1

임베디드 C++ vs C — 런타임·코드 크기·ABI 관점 비교

임베디드에서 C++가 진짜로 무거운가? 측정 가능한 비교와, C가 여전히 옳은 자리들.

2

임베디드 C++ 컴파일러 플래그 분석 — -fno-rtti·-fno-exceptions·-Os

C++를 임베디드 모드로 — -fno-exceptions, -fno-rtti, -Os, -flto. 각 플래그가 실제 바이너리에 무엇을 하는가.

3

임베디드 C++ 런타임 요구사항 — libstdc++·newlib·crt0 분석

C++ 코드가 돌기 위한 최소 런타임 — libstdc++, libsupc++, newlib, libgcc. 무엇이 진짜 필요한가.

4

C++ 코드 크기 분석 — 가상 함수·템플릿·예외 비용 추적

size, nm, objdump, bloaty — 어디서 어떤 크기가 오는지 측정하는 도구. bloat 추적의 표준 워크플로.

5

C++ ABI 호환성 — Itanium ABI·name mangling·vtable 레이아웃

C와 C++가 한 바이너리에서 살아남는 법 — name mangling, extern "C", calling convention, struct layout.

6

C++ 스타트업 코드 분석 — .init_array·전역 생성자 호출 순서

Reset에서 main까지 — vector table, .data 복사, .bss 초기화, __libc_init_array가 호출하는 C++ static 생성자.

7

임베디드 C++ 링커 스크립트 — vtable·정적 객체 배치 추적

MEMORY와 SECTIONS — Flash와 RAM에 C++ 객체와 코드를 정확한 위치에 두는 법.

8

임베디드 C++ 표준 선택 가이드 — C++11/14/17/20/23 트레이드오프

C++11/14/17/20/23 — 임베디드에서 어느 표준을 골라야 하나. 컴파일러 지원, 표준 라이브러리 변화, 핵심 기능 비교.

9

임베디드 RAII 기초 — 리소스 안전성과 결정적 소멸 보장

Resource Acquisition Is Initialization — 자원 생명주기를 객체 생명주기에 묶는 C++의 핵심 idiom.

10

임베디드 RAII 실전 패턴 — Lock·Pin·DMA·Power 관리

scoped_lock, unique_ptr with custom deleter, ScopedXxx, Finally — 임베디드에 자주 등장하는 RAII 표준 패턴.

11

constexpr 기초와 임베디드 적용 — 컴파일 타임 계산 활용

컴파일 타임 계산 — 런타임 코드와 데이터를 컴파일러가 미리 만들어줍니다. -Os보다 강력한 zero-cost.

12

constexpr 고급 활용 — 룩업 테이블·CRC·해시 컴파일 타임 생성

컴파일 타임 sort, search, 문자열 — constexpr 알고리즘의 한계와 가능성.

13

consteval과 constinit 분석 — C++20 컴파일 타임 강제 메커니즘

C++20의 컴파일 타임 강제 — consteval은 함수 호출을, constinit은 변수 초기화를 컴파일 타임에 강제합니다.

14

임베디드 Templates 기초 — 타입 안전과 코드 재사용 분석

함수 템플릿과 클래스 템플릿 — 컴파일 타임 다형성으로 type-safe + zero-cost generic 코드.

15

Template 비용 분석 — 코드 폭증·인스턴스화·디버그 정보 측정

Template instantiation의 코드 bloat — 추적, 통제, 공통 부분 분리 패턴.

16

CRTP 패턴 분석 — vtable 없는 정적 다형성

Curiously Recurring Template Pattern — virtual 함수 없이 컴파일 타임 다형성. vtable 0, 간접 호출 0.

17

Type Traits 임베디드 활용 — SFINAE·is_pod·컴파일 타임 검사

std::is_*, std::enable_if, SFINAE — 컴파일 타임 type 정보로 코드 분기와 검증.

18

C++20 Concepts 활용 — 템플릿 제약과 가독성 개선

Template 제약을 명시 — SFINAE의 가독성 개선, 에러 메시지 명확화, 자체 문서화.

19

동적 할당 없는 임베디드 C++ — placement new·정적 객체·풀

임베디드의 첫 번째 원칙 — new/malloc 없이 modern C++의 STL 같은 컨테이너 활용.

20

Custom Allocator 기초 — std::allocator 인터페이스 분석

STL allocator interface — 표준 컨테이너의 메모리 출처를 제어.

21

Pool Allocator 구현 — Fixed-Size Block과 O(1) 보장

고정 크기 블록 + free list — 임베디드의 표준 allocator 구현.

22

std::pmr 임베디드 활용 — Polymorphic Memory Resource 분석

C++17 polymorphic allocator — 같은 컨테이너 타입에 다른 메모리 출처 주입.

23

No-Exception C++ 설계 — 코드 크기·결정성 트레이드오프

-fno-exceptions 환경에서 에러 처리 — error code, std::optional, std::expected.

24

임베디드 에러 처리 패턴 — Result·errno·optional 비교

Result types, error chains, exception-free RAII — 실용적 에러 시스템 구축 패턴.

25

std::expected 분석 — C++23 결과 타입과 에러 전파

C++23의 Result type — Rust 같은 monadic 에러 처리, 예외 없이 풍부한 정보.

26

No-RTTI C++ 설계 — dynamic_cast 제거와 정적 타입 분기

-fno-rtti 환경에서 type info 없이 다형성 — enum tag, std::variant, CRTP.

27

임베디드 스마트 포인터 선택 — unique·shared·custom 비교

unique_ptr vs shared_ptr vs raw pointer — 임베디드의 소유권 모델 선택.

28

임베디드 C++ 소유권 모델 — single·shared·borrow 패턴

Owner, observer, borrower — 객체 lifetime의 명확한 책임 할당.

29

Intrusive Containers 분석 — 동적 할당 없는 컨테이너 설계

객체가 자기 next pointer 보유 — 동적 할당 없는 linked list와 tree.

30

ETL 라이브러리 분석 — Embedded Template Library의 STL 대체

Embedded Template Library — heap 없는 STL 대체, fsm, message router 포함.

31

임베디드 Lock-free 기초 — atomic·memory ordering·CAS

Atomic, CAS, memory order — mutex 없이 동시성. 임베디드의 ISR-safe 패턴.

32

Lock-free Container 구현 — SPSC Queue·Ring Buffer

SPSC queue, MPMC stack, ring buffer — lock-free 자료구조 구현 패턴.

33

Type-safe Flags 패턴 — Enum Class·Strong Typedef·Tag

enum class + bit operators — type-safe 비트 플래그. 의도하지 않은 변환 차단.

34

임베디드 State Machine 패턴 — Variant·Visitor·Table-driven 비교

타입 안전한 상태 머신 — enum + switch부터 std::variant, etl::fsm까지.

35

Compile-time FSM 구현 — 템플릿으로 상태 전이 검증

constexpr state machine — 컴파일 타임에 전이 검증, runtime 코드 0.

36

Singleton 대안 패턴 — Service Locator·Static Init·Phantom

임베디드의 DI 패턴 — Construct-On-First-Use, static dependency injection, service locator.

37

MMIO Register 추상화 — 타입 안전한 비트 필드 접근

MMIO를 type-safe하게 — volatile, bit field, register wrapper class.

38

GPIO 추상화 패턴 — Template·Concept으로 보드 독립성

GPIO pin = type — 컴파일 타임에 핀 설정 검증, runtime 비용 0.

39

Peripheral 추상화 — UART·SPI·I2C 공통 인터페이스 설계

UART, SPI, I2C — peripheral을 type-safe class로. Blocking, interrupt, DMA 패턴.

40

임베디드 HAL 설계 패턴 — Static·Dynamic·Hybrid 비교

범용 HAL 구조 — 벤더 종속성 격리, 다중 보드/MCU 지원, 시리즈 마무리.