Befehlssatz und Assembler
Welchen Vorteil hat die Verwendung eines Framepointers (bei RISC-V s0/fp) in einer Funktion?
- ADa kein zusätzliches Register verbraucht wird, steigt die Leistung stets
- BAuch wenn sich sp mitten in der Funktion ändert, lassen sich lokale Variablen und Argumente mit festem Abstand ansprechen, und Debugger können die Aufrufkette leichter verfolgen
- CDer Stackbereich wächst automatisch und läuft nicht mehr über
Antwort und Erläuterung anzeigen
Antwort: B. Auch wenn sich sp mitten in der Funktion ändert, lassen sich lokale Variablen und Argumente mit festem Abstand ansprechen, und Debugger können die Aufrufkette leichter verfolgen
Der Framepointer ist ein Register, das auf die Stackposition beim Betreten der Funktion zeigt und sich nicht bewegt. Auch wenn sich sp mittendrin ändert, z. B. bei Arrays variabler Länge, lassen sich lokale Variablen als „so viele Byte von fp“ angeben. Wird in jedem Frame der vorherige fp gesichert, ergibt das Verfolgen die Aufrufkette (Backtrace). Da jedoch ein Register belegt wird, entfällt er bei Optimierungen oft.