Indenfor datalogi er en linker et program, som tager output fra en compiler (kaldet objektkode) som input - og producerer som output 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 programmoduler. Hvis der er brugt færdige programbiblioteker håndterer linkeren også referencer til dem.

redigér

Den maskinkode som compileren har lavet er ikke klar til brug. I alle filer adresseres funktioner og variable 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

redigér

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å blive tilføjet forskellige systemmoduler.

redigér

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.

Sammenligning

redigér

Der er fordele og ulemper ved begge måder at lave link af programmer på. Statisk link er enkel, men da moduler ofte anvendes på tværs af programmer kan det give et anledning til en del ressourcespild. Jo større modulerne er, jo større er problemet. På den anden side er statisk linkede programmer hurtige at læse fra disk, da alt hentes på en gang. Et program, der er statisk linket har færre afhængigheder til det system, det afvikles på, så det kan potentielt virke på flere maskiner.

Dynamisk link giver mulighed for, at det samme modul kan bruges fra mange programmer. Det sparer hukommelse. På den anden side tager det lidt tid at lavet selve linken, og indlæsning af mange små moduler er ikke effektivt. På de fleste systemer bruges dog dynamisk link fordi mange programmer slet ikke bruger alle moduler hver gang det afvikles. Til gengæld bruger næsten alle programmer en del moduler, som styresystemet stiller til rådighed, og de skal kun læses fra disk første gang de bliver brugt.