Runtime-omgivelser Kap 7 - II

Like dokumenter
Runtimesystemer - II. Parameteroverføring Call by value Call by reference Call by value-result Call by name INF 3110/ INF

Runtimesystemer - II. Funksjoner som parametere. Virtuelle metoder

Runtimesystemer del III

Runtime- systemer del III

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Runtime-omgivelser Kap 7 - I

Anatomien til en kompilator - I

Runtimesystemer Kap 7 - I

Anatomien til en kompilator - I

Runtimesystemer Kap 7 - I

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

Dagens tema: Kjøresystemer II

Semantisk Analyse del III

Datatyper og typesjekking

Datatyper og typesjekking

Datatyper og typesjekking

2012 2a. C rc; void main() { rc = new C (); rc.m2(); } } INF 3110/ INF /28/13 1

Datatyper og typesjekking

UNIVERSITETET I OSLO

Diverse eksamensgaver

UNIVERSITETET I OSLO

INF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2

Fiktiv eksamensbesvarelse IN 211 høsten 2001

UNIVERSITETET I OSLO

INF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2

IN 147 Program og maskinvare

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Enkle generiske klasser i Java

Skal bindes opp til en deklarasjon av samme navn

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Semantikk. Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Semantikk. Semantikk. En måte å svare på: gi semantikken til språket!

Rekursjon og lister. Stephan Oepen & Erik Velldal. 1. februar, Universitetet i Oslo

Kap 6.4: Typesjekking Foiler ved Birger Møller-Pedersen Forelest av Stein Krogdahl 19. og 23. mars Dagens tema: Typer og typesjekking

INF2810: Funksjonell Programmering. Tilstand og verditilordning

INF2810: Funksjonell Programmering. Tilstand og verditilordning

2 Om statiske variable/konstanter og statiske metoder.

MED SVARFORSLAG UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

2 Om statiske variable/konstanter og statiske metoder.

INF2810: Funksjonell Programmering. Tilstand og verditilordning

Skal bindes opp til en deklarasjon av samme navn

Kap 6.3: Symboltabellen Foiler ved Birger Møller-Pedersen Forelest av Stein Krogdahl 17. mars Dagens tema:

INF2810: Funksjonell Programmering. Tilstand og verditilordning

UNIVERSITETET I OSLO

INF2810: Funksjonell Programmering. Lister og høyereordens prosedyrer

Løsningsforslag til eksamen i IN 211 høsten 2002

Programmeringsspråket C Del 3

INF2810: Funksjonell Programmering. Strømmer og utsatt evaluering

Programmeringsspråket C Del 3

Generiske mekanismer i statisk typede programmeringsspråk

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

INF2810: Funksjonell Programmering

Del 4 Noen spesielle C-elementer

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

INF2810: Funksjonell Programmering. En metasirkulær evaluator

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

INF2810: Funksjonell Programmering

Kjøresystemer. Hva er et kjøresystem? Den abstrakte maskinen SIMPLESEM (2.6) Klassifisering av språk: Parametre (2.7.7) Statiske språk (

INF2810: Funksjonell Programmering. Kommentarer til prøveeksamen

Nybegynnerkurs i C. Øyvind Grønnesby. 14. oktober Introduksjon Typer Operatorer Kontrollstrukturer Pekere Makroer Lenker

UNIVERSITETET I OSLO

INF225 høsten 2003 Prosjekt del 4: kodegenerering

Litt om Javas class-filer og byte-kode

KONTINUASJONSEKSAMEN

INF2810: Funksjonell Programmering. En metasirkulær evaluator

INF2810: Funksjonell Programmering. Lister og høyereordens prosedyrer

Løsningsforslag for eksamensoppgave, våren 2004

INF3110 Programmeringsspråk. Velkommen til kurset INF 3110/4110. Programmeringsspråk 1/24

INF 3110/4110. Velkommen til kurset. Programmeringsspråk. Først det praktiske

UNIVERSITETET I OSLO

Dagens tema: Sjekking

Objekter og referanser

Dagens tema C, adresser og pekere

Ark 3 av 26. printf("i adresse %08x ligger b med verdien %d.\n", &b, b); printf("i adresse %08x ligger a med verdien %d.

INF2810: Funksjonell Programmering. Dataabstraksjon og Trerekursjon

Løsnings forslag i java In115, Våren 1996

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

UNIVERSITETET I OSLO

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Med Svarforslag UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet. 3 sider (side 6, 7 og 8, rives ut, fylles ut og leveres)

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved

INF2810: Funksjonell Programmering. Utsatt evaluering og strømmer

Eksamen iin115 og IN110, 15. mai 1997 Side 2 Oppgave 1 Trær 55 % Vi skal i denne oppgaven se på en form for søkestrukturer som er spesielt godt egnet

Beskrivelse av programmeringsspråket Simpila INF Kompilatorteknikk Våren 2012

Høyere-ordens prosedyrer

INF1010 notat: Binærsøking og quicksort

INF2810: Funksjonell Programmering. Utsatt evaluering og strømmer

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

UNIVERSITETET I OSLO

Transkript:

Runtime-omgivelser Kap 7 - II Dynamisk lager-allokering/når trenger vi en heap For objekter/recorder som allokeres dynamisk (new) og som man kan ha pekere til Gjelder ofte også array-objekter Under visse forhold også aktiveringsblokker for prosedyrer Simula, pga korutiner Hvis man har Prosedyre-variable Nestede prosedyrer 3/28/2007 1

Noen alternativer Når blir plass ledig? 1. Brukeren sier selv fra (alloc/free) Kan lett bli feil og inkonsistenser 2. Systemet finner automitisk hva som blir ledig Krever ekstra administrasjon/informasjon Gjenbruk av frigjort plass 1. Man flytter aldrig objekter Fører lett til fragmentering 2. Man flytter sammmen de objekter som skal bevares Krever ekstra administrasjon/informasjon Alle pekere til flyttede objekter må forandres All ledig plass samlet i et område 3/28/2007 2

Problemer med frie pekere Dette og lignende problemer (spesielt i funksjonelle språk, men også for korutiner i Simula) gjør det nødvendig å legge aktiveringsblokker for prosedyrer på heapen Altså: dynamisk prosedyre allokering/deallokeringikke stakk-basert Her defineres navnet proc Leverer en prosedyre Prosedyren som leveres er lokal i g, og g() terminerer 3/28/2007 3

Eksempel på gjenvinning når objekter ikke kan flyttes Vi får noe lineær leting både ved reservering og ved frigivelse Finnes metoder der denne letingen bare blir logaritmisk (buddyalgoritmen) Struktur på et par av brukt og ubrukt lagerområde 3/28/2007 4

1) 3) Peker til en eller annen blokk som har ledig plass 2) har begge freesize=0 3/28/2007 5

Leverer en utypet peker Initialisering Regn om til antal hele hode-lengder + 1 Skill ut et nytt område i bruk, med eget hode Peker til hodet av den som skal frigjøres Let etter den som skal returneres, og husk forgjengeren (prev) La den frigjorte inngå i fri-området til prev, og husk forgjengeren (prev) 3/28/2007 6

Garbage Collection I Deler ut plass ukritisk så lenge det er plass. Når det ikke er plass mer tar vi en større opprydning Starter altid med et fullt rekursivt gjennomløp, der vi finner alle objekter som kan nåes fra variable vi kan nå direkte (røtter) Alle objekter som kan nåes merkes. Krever eget bit i hvert objekt. røtter (bl.a fp) NB (ikke nevnt i boken): Krever også at man kan finne ut hva som er pekere i et gitt objekt 3/28/2007 7

Garbage Collection II Etter merkingen ( mark ) gjøres et sekvensielt gjennomløp av lageret ( sweep ), der de umerkede objekter leveres tilbake Må slå sammen ledig naboplass Ledig plass holdes f.eks. i en eller fler frilister I stedet for sweep kan man gjøre compaction : flytte alle objektene tett sammen. NB: Da må man også forandre alle pekere til det stedet objektet flyttes til 3/28/2007 8

Garbage Collection III To-delt lager Deler plassen i to og bruker bare halvparten av gangen mark og compaction kan da gjøres i ett rekursivt gjennomløp Hvert objekt må ha et ledig bit ( er flyttet ) Da angir neste ordet adressen det er flyttet til 3/28/2007 9

3/28/2007 10

3/28/2007 11

3/28/2007 12

x 3/28/2007 13

x x 3/28/2007 14

by value parameteroverføring (verdioverføring) Kall: inc2(&y) Kall: init(a) Hver formell parameter blir implementert som en lokal variabel i prosedyren Ved kall blir disse variable initialisert slik: formell_var = aktuelt uttrykk I noen språk kan den formelle variablen ikke forandres I C er dette eneste overføringsmåte. Man kan dog overføre pekere by value 3/28/2007 15

by reference parameteroverføring Overfører en peker/adresse til den aktuelle variabel Bare lov med variable som aktuelle parametere Fortran tillater imidlertid P(5,b) P(a+b,c) Passer til store datastrukturer Kall: inc2(y) void P(p1,p2) {... p1 = 3 } var a,b,c; P(a,c) 3/28/2007 16

by value-result parameteroverføring Bare variable kan være aktuelle parametere Det allokeres en lokal variabel, som ved by value Ved kallet gjøres formell_var = aktuell_var Ved retur utføres aktuell_var = formell_var Kan gi effekt forskjellig fra by reference (Men f.eks. Ada godkjenner også dette som en implementasjon) Eksempel på at det kan være forskjell på by reference og by value-result 3/28/2007 17

by name parameteroverføring Den aktuelle parameteren blir substituert inn for den formelle ( nesten rent tekstlig: den aktuelle parameteren beholder sitt skop, så altså ikke makro-ekspansjon) Om den aktuelle parameteren er et uttrykk blir det det ikke beregnet før man bruker parameteren inne i prosedyren (lazy evaluering) Men: Uttrykket blir beregnet om igjen hver gang Implementasjon Se den aktuelle parameteren (f.eks. et uttrykk) som en liten prosedyre ( thunk ) Må optimaliseres for det tilfellet hvor parameteren er en enkel variabel (da er effekten som ved by reference) p(a[i]) ++a[i] 3/28/2007 18

by name eksempel procedure P(par); name par; int par; begin int x,y;... par := x + y; a)... x := par + y; b)... end;... P(v); P(r.v); P(5); P(u+v); a) b) v r.v 5 u + v OK OK feil feil OK OK OK OK 3/28/2007 19