Сегмент BSS
Секция памяти для глобальных и статических переменных, которые начинают с нуля: она занимает ОЗУ, но не место в файле программы.
Глобальный int buffer[4096]; без инициализатора не обязан храниться в исполняемом файле как 16 КБ нулей. Компилятор помещает его в .bss, а файл лишь фиксирует размер секции. Переменные с ненулевым начальным значением попадают в .data, содержимое которой действительно приходится поставлять.
На микроконтроллере операционной системы, которая обнулит память за вас, нет. Стартовый код проходит по диапазону между символами, заданными в скрипте компоновщика, и записывает нули до вызова main(). Забудьте об этом — и программа стартует с тем мусором, что лежал в ОЗУ; такой баг любит проявляться лишь после мягкого сброса. Название — реликт 1950-х: Block Started by Symbol, псевдокоманда ассемблера для IBM 704.