Principy překladačů Běhová podpora Jakub Yaghob
Běhová podpora Statická podpora jazyka Překladač Interface na knihovny Hlavičkové soubory Dynamická podpora jazyka Prostředí běhu programu Rozdělení paměti Stav paměti před spuštěním Konstruktory, destruktory globálních objektů Knihovny Volací konvence
Rozdělení paměti Rozdělení paměti za běhu v procedurálních programech Heap Kód Statická data Zásobník Heap Kód Neinicializovaná statická data Zásobník vlákna n Zásobník vlákna 1 Konstanty Inicializovaná statická data
Aktivační záznam Odkaz na AZ AZ volající funkce Přístupový odkaz Odkaz na data sémanticky nadřazených funkcí Uložený stav stroje Návratová adresa do kódu Registry Návratová hodnota Aktuální parametry Odkaz na AZ Přístupový odkaz Uložený stav stroje Lokální data Přechodné hodnoty
Volací konvence Mandlování veřejných jmen Mechanismus volání funkcí a procedur Zodpovědnost za úklid Způsob předávání parametrů Registry, zásobník Pořadí ukládání parametrů na zásobník Způsob předávání návratové hodnoty funkcí Registry, zásobník Požadavky na uchování stavu registrů Registry pro registrové proměnné
Mechanismus volání funkcí Parametry, návratová hodnota Odkazy, stav stroje Lokální a přechodná data Parametry, návratová hodnota Odkazy, stav stroje Lokální a přechodná data Aktivační záznam volajícího Aktivační záznam volaného FP Odpovědnost volajícího Odpovědnost volaného CPascal Odpovědnost volajícího Odpovědnost volaného
Přístup k sémanticky nadřazeným proměnným Pascal Vnořené funkce procedure A; var I:integer; procedure B; var J:integer; procedure C; begin …I+J… end; begin if I>0 B else C; end; begin B end; Parametry - nic Předchozí AZ RA I Parametry - nic Předchozí AZ RA J Odkaz na A Parametry - nic Předchozí AZ RA J Odkaz na A Parametry - nic Předchozí AZ RA Proměnné - nic Odkaz na A Odkaz na B
Předávání parametrů Předávání hodnotou Aktuální hodnota parametru vypočtena a okopírována Vstupní parametry, chová se jako lokální proměnná C, „nevařené“ parametry v Pascalu Předávání referencí Volající předá adresu na místo v paměti Vstupně/výstupní parametry & v C++, „vařené“ parametry v Pascalu Předávání jménem Chová se jako makro – aktuální výraz se „inlinuje“ na místech použití
Dynamická paměť Alokační algoritmy Spojité bloky volné velikosti Garbage collector Implicitní dealokace Čítače odkazů Značkování V jistém okamžiku se zastaví běh programu Všechny ukazatele musí být známy včetně typů Všechny bloky se označí jako nepoužité Prochází se rekurzivně ukazatele a značkují se použité bloky Nepoužité se odstraní Lze i setřepat