임베디드 용어 사전
부팅·빌드

맵 파일

링커가 남기는 배치 보고서. 어떤 심볼이 어디에 얼마나 놓였는지 전부 적혀 있다.

용량 문제를 조사할 때 가장 먼저 여는 파일이다.

arm-none-eabi-gcc ... -Wl,-Map=firmware.map

무엇을 볼 수 있나

섹션별 크기와 주소        .text 얼마, .data 얼마, .bss 얼마
심볼별 크기              어떤 함수·배열이 큰가
어느 오브젝트에서 왔는가   내 코드인가 라이브러리인가

자주 발견하는 것

printf 계열 하나가 수 KB 를 끌고 들어온다     nano 라이브러리나 경량 포맷터로 대체
부동소수점 지원 코드가 통째로 들어와 있다      %f 를 안 쓰면 뺄 수 있다
안 쓰는 함수가 남아 있다                    -ffunction-sections 와 --gc-sections

더 빠른 방법

arm-none-eabi-nm --size-sort -S firmware.elf | tail -20
arm-none-eabi-size firmware.elf

크기 순으로 심볼을 보는 것이 맵 파일을 읽는 것보다 빠르다. 빌드마다 size 결과를 CI 로그에 남기면 용량이 언제 튀었는지 추적할 수 있다.

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — 링커 스크립트와 빌드 — 무엇이 어디에 놓이는가