Segmento BSS
La sección de memoria para variables globales y estáticas que empiezan valiendo cero: ocupa RAM, pero nada en el archivo del programa.
Un int buffer[4096]; global sin inicializador no necesita guardarse como 16 KB de ceros en el ejecutable. El compilador lo coloca en .bss y el archivo solo anota el tamaño de la sección. Las variables con valor inicial distinto de cero van a .data, cuyo contenido sí hay que incluir.
En un microcontrolador no hay sistema operativo que ponga la memoria a cero. El código de arranque recorre el rango entre los símbolos que define el script del enlazador y escribe ceros antes de llamar a main(). Si se olvida, el programa arranca con la basura que hubiera en la RAM, un fallo que suele aparecer solo tras un reinicio en caliente. El nombre es una reliquia de los años cincuenta: Block Started by Symbol, una pseudoinstrucción de un ensamblador del IBM 704.