Linker: Forskelle mellem versioner

Content deleted Content added
Rune (diskussion | bidrag)
m Linkret
Rune (diskussion | bidrag)
Beskrivelse af statisk og dynamisk link
Linje 1:
En '''linker''' har output fra en [[Oversætter (datalogi)|compiler]] som input og producerer et færdigt [[computerprogram]], som kan afvikles.
 
Der findes to typer linkere. De kan være statiske eller dynamiske. En statisk linker sætter alt, hvad programmet skal bruge sammen i en fil, mens en dynamisk linker aktiveres på afviklingstidspunktet for at tilpasse programmet til de aktuelle tilgængelige program modulerprogrammoduler.
 
==Statisk link==
Den [[maskinkode]] som compileren har lavet er ikke klar til brug. I alle filer er addresseres [[funktion (programmering)|funktioner]] og variabler fra nul. Ved statisk link af et program bliver modulerne sat sammen i en vilkårlig rækkefølge, og alle adresser tilpasses den endelige placering i filen. På afviklingstidspunktet lægges programmets aktuelle startadresse (position i [[ram]]) til alle adresser.
===Eksempel===
Et program består af fire moduler:
 
Modul Længde Startadresse
Intro 4500 0
Spil 11000 4500
Baner 42000 15500
Topscore 2700 57500
 
I modulet Intro ændres adresserne ikke. I Spil lægges 4500 bytes til alle adresser. I de andre lægges henholdsvis 15500 og 57500 bytes til. Der vil også tilføjet forskellige systemmoduler.
 
==Dynamisk link==
Med dynamisk link udsættes så mange af adresseberegningerne som muligt til afviklingtidspunktet. For at få det til at virke, skal man sikre sig, at compileren har genereret kode, der kan afvikles forskellige steder i ram fra gang til gang. Hvert modul befinder sig i en fil, som først bliver læst, når der er brug for det. I eksemplet ovenfor vil modulet Intro være det program, som brugeren aktiverer. Når modulet Spil skal bruges, vil den dynamiske linker indlæse modulet, og rette Intro i ram, så alle referencer til funktioner i Spil kan bruges. Når der bliver brug for andre moduler vil de også blive indlæst, og adresserne i de kaldende moduler vil blive rettet til.
 
{{stub}}