1/ Ich habe an Projekten mitgewirkt, bei denen dynamisches Linking mit statischem Linking verglichen wurde, und der Unterschied war nicht so gering, dass man auf dynamisches Linking umgestiegen wäre (ich war nicht an dem Test beteiligt, ich kenne nur die Schlussfolgerung)
2/ Dynamisches Linking wird oft mit PIC (Position Independent Code, Code, der je nach der Adresse, an der er geladen wird, nicht geändert werden muss) in Verbindung gebracht. Abhängig von der Architektur kann PIC eine weitere Verlangsamung mit sich bringen, wird aber benötigt, um den Vorteil der gemeinsamen Nutzung einer dynamisch gelinkten Bibliothek durch zwei ausführbare Programme zu erhalten (und sogar durch zwei Prozesse desselben ausführbaren Programms, wenn das Betriebssystem die Randomisierung der Ladeadresse als Sicherheitsmaßnahme verwendet). Ich bin mir nicht sicher, ob alle Betriebssysteme eine Trennung der beiden Konzepte erlauben, aber Solaris und Linux tun dies und ich vermute, dass HP-UX dies ebenfalls tut.
3/ Ich habe schon an anderen Projekten mitgearbeitet, die dynamisches Linking für die Funktion "easy patch" verwendet haben. Aber dieser "einfache Patch" macht die Verteilung von kleinen Korrekturen etwas einfacher und von komplizierten zu einem Versions-Albtraum. Am Ende mussten wir oft alles pushen und Probleme beim Kunden nachverfolgen, weil die falsche Version auf dem Token war.
Meine Schlussfolgerung ist, dass ich die statische Verknüpfung ausgenommen hatte:
-
für Dinge wie Plugins, die auf dynamische Verknüpfungen angewiesen sind
-
wenn die gemeinsame Nutzung wichtig ist (große Bibliotheken, die von mehreren Prozessen gleichzeitig verwendet werden, wie z. B. C/C++-Laufzeitumgebung, GUI-Bibliotheken, ..., die oft unabhängig verwaltet werden und für die die ABI streng definiert ist)
Wenn man den "einfachen Patch" verwenden möchte, würde ich argumentieren, dass die Bibliotheken wie die großen Bibliotheken oben verwaltet werden müssen: sie müssen nahezu unabhängig sein mit einer definierten ABI, die nicht durch Korrekturen verändert werden darf.