Compiler
Was geschieht mit dem erzeugten Code, wenn bei der Registerzuteilung ein „Spill“ auftritt?
- ABefehle zum Auslagern in den Stack und Zurücklesen kommen hinzu, und der Code wird tendenziell langsamer
- BDie Zahl der Register steigt automatisch, sodass alle Werte in Registern liegen können
- CNicht verwendete Werte werden entfernt, und die Zahl der Befehle sinkt
Antwort und Erläuterung anzeigen
Antwort: A. Befehle zum Auslagern in den Stack und Zurücklesen kommen hinzu, und der Code wird tendenziell langsamer
Ein Spill bedeutet, dass einige Werte im Speicher (Stack) abgelegt werden, wenn mehr Werte gleichzeitig lebendig sind, als Register vorhanden sind. Für jede Verwendung dieses Werts ist ein Ladebefehl und für jede Änderung ein Speicherbefehl nötig, sodass die Befehlszahl steigt und der Code durch die Speicherzugriffe tendenziell langsamer wird. Der Compiler behält daher häufig verwendete Werte, etwa in Schleifen, in Registern und lagert selten verwendete Werte aus. Die Registerzahl ist durch die CPU festgelegt und wächst nicht, und das Entfernen unnötiger Werte ist eine andere Sache.