Wat is BSS-sectie?
Gebied voor globale en statische variabelen zonder beginwaarde (of met waarde 0). In het bestand wordt alleen de grootte vastgelegd en bij het laden wordt het met nullen gevuld, zodat het uitvoerbare bestand niet groter wordt.
Japanse benaming: BSSセクション
“BSS-sectie” komt voor in 2 oefenvragen uit 1 onderwerpen, bijv. Linker, loader en uitvoerbare formaten.
Vakgebied: Linker, loader en uitvoerbare formaten
Wat er in .bss terechtkomt
De taal C vereist dat elk object met statische opslagduur, dus globale en statische variabelen, op nul begint als er geen initializer is opgegeven. Compilers plaatsen zulke variabelen, en meestal ook variabelen die expliciet op 0 zijn geïnitialiseerd, in de .bss-sectie. Globale variabelen met een beginwaarde ongelijk aan nul gaan naar .data, en const-constanten naar de read-only sectie .rodata. Het sleutelwoord static bepaalt niet de sectie; het beperkt alleen de zichtbaarheid tot één bestand. Lokale automatische variabelen komen nooit in .bss terecht, omdat ze op de stack staan en geen gedefinieerde beginwaarde hebben.
Veelgestelde vragen
Waar staat BSS voor?
BSS wordt meestal uitgelegd als block started by symbol, naar een oud assemblerdirectief. In moderne toolchains is het gewoon de naam van de sectie voor met nul geïnitialiseerde globale en statische variabelen.
Maakt een grote niet-geïnitialiseerde array het uitvoerbare bestand groter?
Nee. Een globale of statische array zonder initializer komt in .bss terecht, waar alleen de grootte wordt vastgelegd; het geheugen wordt gealloceerd en met nullen gevuld wanneer het programma wordt geladen.
Wat is het verschil tussen .data en .bss?
De .data-sectie bevat globale en statische variabelen met een beginwaarde ongelijk aan nul, die in het bestand moeten worden opgeslagen. De .bss-sectie bevat de variabelen die op nul beginnen, zodat ze tijdens runtime geheugen inneemt maar in het bestand geen ruimte voor inhoud.