Inhoudsopgave:
Definitie - Wat betekent registratietoewijzing?
Registertoewijzing verwijst naar de praktijk van het toewijzen van variabelen aan registers en het verwerken van gegevensoverdracht naar en uit registers. Registerallocatie kan voorkomen:- Op een basisblok, bekend als lokale registertoewijzing
- Over een volledige functie of procedure, ook wel globale registertoewijzing genoemd
- Over functiegrenzen doorkruist door middel van een oproepgrafiek, bekend als inter-procedurele registertoewijzing
Techopedia legt Registerallocatie uit
Tijdens het compileren moet de compiler de manier bepalen waarop variabelen worden toegewezen aan een klein, specifiek bereik van registers. Sommige van de variabelen zijn mogelijk niet in gebruik of schijnen tegelijkertijd "live" te zijn. Dit leidt tot het toewijzen van enkele registers aan meerdere variabelen. Desalniettemin kunnen geen twee gelijktijdige live variabelen worden toegewezen aan exact hetzelfde register zonder de waarde te corrumperen.
Variabelen die niet aan sommige registers kunnen worden toegewezen, moeten in RAM worden opgeslagen en moeten voor elk lezen en schrijven worden geladen en opgeslagen, respectievelijk een procedure die bekend staat als morsen. Toegang tot registers is veel sneller dan toegang tot RAM. Bovendien versnelt het de uitvoeringstijd van het gecompileerde programma; daarom zijn efficiënte compilers erop gericht zoveel mogelijk variabelen aan registers toe te wijzen.
Over het algemeen wijzen de meeste registertoewijzers elke variabele toe aan het hoofdgeheugen of een CPU-register (Central Processing Unit). Snelheid is het belangrijkste voordeel bij het gebruik van een register. Computers hebben een eindige reeks registers, wat betekent dat niet alle beschikbare variabelen aan registers kunnen worden toegewezen. Het proces van het verplaatsen van een variabele van een register naar het geheugen staat bekend als morsen, terwijl de omgekeerde procedure van het verplaatsen van een variabele van geheugen naar een register bekend staat als vullen. Intelligente registertoewijzing is een cruciale stap voor alle compilers.
Er zijn twee soorten registertoewijzing:
- Toewijzing van lokaal register: dit is een proces waarbij telkens één basisblok (of hyperblok of superblok) wordt toegewezen. Lokale registertoewijzing verhoogt snelheid.
- Globale registoewijzing: als het registergebruik slecht is met lokale toewijzing, is het belangrijk om gebruik te maken van globale registertoewijzing. In eenvoudige globale registertoewijzing worden de meest actieve waarden toegewezen in elke binnenste lus. Volledige globale registoewijzing maakt gebruik van een procedure om live bereiken in een controlestroomgrafiek te identificeren, live bereiken toe te wijzen en desgewenst ook bereiken te splitsen.
