BSS segment
The memory section for global and static variables that start out as zero — it takes up RAM but no space in the program file.
A global int buffer[4096]; with no initialiser does not need to be stored as 16 KB of zeros in the executable. The compiler places it in .bss, and the file merely records the section's size. Variables with non-zero initial values go in .data, whose contents genuinely have to ship.
On a microcontroller there is no operating system to zero memory for you. The startup code walks the range between the symbols defined in the linker script and writes zeros before calling main(). Forget that and the program starts with whatever garbage was sitting in RAM — a bug that likes to show up only after a soft reset. The name is a 1950s relic: Block Started by Symbol, a pseudo-op in an IBM 704 assembler.