임베디드 용어 사전
C 함정

동적 할당

실행 중 힙에서 메모리를 얻는 방식. 임베디드에서는 단편화와 시간 불확정 때문에 대개 쓰지 않는다.

malloc/free 를 임베디드에서 피하는 이유는 취향이 아니라 두 가지 성질 때문이다.

① 단편화

할당·해제를 반복하면 빈 공간이 조각난다
총 여유가 10KB 인데 연속 4KB 를 못 잡는 상황이 생긴다
→ 몇 시간, 며칠 뒤에 실패한다. 재현이 어렵다

② 시간이 불확정

할당에 걸리는 시간이 상황에 따라 달라진다. 매 1ms 를 지켜야 하는 코드에서는 그 자체로 결격이다.

대안

static uint8_t pool[N][SIZE];     // 고정 크기 풀
static Msg queue[QUEUE_LEN];      // 정적 배열 + 인덱스

시작할 때 전부 잡아 두고 끝까지 쓰는 방식이 표준이다. 최대 사용량이 컴파일 시점에 드러나는 것이 가장 큰 이득이다 — 링커 맵만 봐도 RAM 이 모자랄지 알 수 있다.

RTOS 를 쓸 때도 태스크·큐를 정적 생성 API 로 만드는 것이 권장된다.

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — 임베디드 C 함정 — 컴파일은 되는데 틀린 것들