Dynamisch versus statisch linken

Hi,

mal Interesse halber. Wenn ich statisch linke hat mein Programm immer eine statische Groesse, oder? Wenn ich hingegen dynamisch linke, ist der Code den ich dynamisch lade dann nur im Specher resident, wenn er benoetigt wird und wird er dann wieder frei gegeben? Wenn ich z.B. nur fuer die Initialisierung dynamische libs verwende … Oder wird beim Programm start das noetige geladen und bleibt auch dann resident, wenns eigentlich nicht benoetigt wird? Oder klappt das sogar mit statischem Linken?

Gruss

Thorsten

Hi Thorsten,

ob sich diese Fragen klären lassen, hängt wohl stark vom Betriebssystem ab. Meines Wissens hält sich Microsoft ziemlich geschlossen, Linux weiß ich nicht, IBM (MVS/ESA, OS/390) kenne ich einigermaßen:

Statisch: Beim Link wird alles Nötige zusammengebunden.
Dynamisch: Nur der Kern wird beim Link gebunden, alle anderen Module werden je nach Option beim Programmstart oder sogar erst dann dazugebunden, wenn sie gerufen werden.

Eine Freigabe von Speicherplatz erfolgt zur Laufzeit eines Programmes grundsätzlich nicht. Es wäre wohl auch nicht sinnvoll, ein gerade geladenes Modul nach Beendigung sofort wieder zu entladen - stell Dir vor, das passiert in einer Schleife.

In der PC-Welt kenne ich wohl den Begriff „garbage collection“, damit ist das Aufräumen von nicht mehr belegtem Speicher gemeint. Warum das nötig ist, habe ich allerdings nicht ganz begriffen, ich weiß auch nicht, ob das mit dem dynamischen Linken zusammenhängt oder mit Speicher, der zur Laufzeit angefordert wurde.

Gruß Ralf

In der PC-Welt kenne ich wohl den Begriff „garbage
collection“, damit ist das Aufräumen von nicht mehr belegtem
Speicher gemeint. Warum das nötig ist, habe ich allerdings
nicht ganz begriffen, ich weiß auch nicht, ob das mit dem
dynamischen Linken zusammenhängt oder mit Speicher, der zur
Laufzeit angefordert wurde.

AFAIK Speicher der zur Laufzeit angefordert wurde, z. B. in C++ mit new oder in C mit malloc().

Unter Java gibts z. B. die automatische Garbage Collection, wenn keine Referenz auf ein Objekt mehr existiert wird der Speicher freigegeben.

Grüße, Robert

Hi,

wir hatten den Fall mal bei einer Win-App. Letztendlich wurde das glabue ich so gelöst, das wir selber eine DLL mit einem COM-Objekt nachegeladen haben oder so. Und die konnte dann auch freigegeben werden (von uns). Hintergrund war, das diese DLL Speicherlecks hatte, aber dringend gebraucht wurde. Und das System selber hat die nicht entladen!!

MFG Diez

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]