임베디드 기초 2편 - 메모리 구조와 변수 저장 원리

들어가며 1편에서 펌웨어가 플래시에 저장되고, 변수는 RAM에서 동작한다고 정리했다. 그런데 막상 “전역변수는 어디 저장돼요?”, “const는요?” 라는 질문을 받으면 정확하게 대답하기가 쉽지 않다. Flash vs RAM 다시 짚기 플래시(Flash) 비휘발성(non-volatile) — 전원을 꺼도 데이터가 유지된다 읽기는 자유롭지만, 쓰기는 Erase → Write 순서로 페이지/섹터 단위로만 가능하다 속도가 RAM보다 느리다 코드(명령어), 상수, 전역변수 초기값이 저장된다 RAM 휘발성(volatile) — 전원을 끄면 데이터가 사라진다 자유롭게 읽기/쓰기 가능하고 속도가 빠르다 실행 중 변하는 데이터(전역변수, 지역변수, 동적 할당(dynamic allocation))가 올라간다 메모리 섹션: .text / .data / .bss 링커는 빌드 결과물을 목적에 따라 여러 섹션으로 분리해서 관리한다. ...

2026년 5월 10일 · 4 min · 서보민

자료구조 1편 - 배열과 동적 배열: 메모리를 직접 다루다

임베디드 환경에서는 ArrayList 같은 편한 도구를 쓸 수 없다. RAM이 수백 KB밖에 안 되는 MCU에서는 데이터가 메모리 어디에, 어떻게 올라가는지 직접 따져야 한다. 힙 할당도 단편화 위험 때문에 웬만하면 쓰지 않는다. 배열은 가장 기본이면서 임베디드에서도 현역으로 쓰이는 자료구조다. C로 직접 구현하면서 메모리 레이아웃과 포인터 동작을 같이 짚어본다. 정적 배열 (Static Array) 1 int arr[5] = {10, 20, 30, 40, 50}; 이 한 줄이 선언되는 순간 스택(Stack) 에 5 × 4 = 20바이트가 연속으로 잡힌다. ...

2026년 4월 15일 · 4 min · 서보민