Linker, loader en uitvoerbare formaten
Wat gebeurt er in het algemeen op Linux en dergelijke als recursie te diep wordt en de bovengrens van de stack wordt overschreden?
- AEr wordt een guard page aangeraakt waarvan de toegang is verboden en die voorbij de stack ligt, en het programma eindigt abnormaal
- BHet OS verplaatst de stack automatisch naar schijf en er kan onbeperkt diep worden gerecurseerd
- COude stackframes worden automatisch gewist en de berekening gaat correct verder
Antwoord en toelichting tonen
Antwoord: A. Er wordt een guard page aangeraakt waarvan de toegang is verboden en die voorbij de stack ligt, en het programma eindigt abnormaal
De stack heeft een bovengrens en daarachter ligt een guard page waarvan de toegang is verboden. Als de stack door te diepe recursie deze bereikt, treedt een page fault op en stopt het OS het programma (segmentation fault). Het voordeel van de guard page is dat kan worden gestopt voordat andere data worden beschadigd. Hetzelfde gebeurt als een grote array als lokale variabele wordt gebruikt, dus grote data worden veiliger op de heap geplaatst.
Verder: nog 9 vragen over Linker, loader en uitvoerbare formaten