2017-07-06 3 views
-1

Ich habe ein C++ - Programm (in Wirklichkeit ist es eine DLL), die dynamisch zu einer anderen gemeinsam genutzten Bibliothek (Python-DLL) verbindet, dieses Programm hat zwei Gelegenheiten zu verwenden.Beeinträchtigt es die Leistung, dynamisch eine gemeinsam genutzte Bibliothek zu verknüpfen, die nicht verwendet wird?

In Gelegenheit A, wird das Programm Funktionsaufrufe an diese dynamisch verknüpfte gemeinsam genutzte Bibliothek machen, während in Gelegenheit B, das Programm nicht.

Meine Frage ist, wenn ich das Programm speziell für Gelegenheit B ohne Verbindung zur gemeinsamen Bibliothek baue, werde ich Leistung im Vergleich zu dem Fall, wo ich die gemeinsame Bibliothek verknüpfen, ohne sie tatsächlich zu verwenden?

+0

Ich denke "unwichtige Zeit" ..? – user2864740

Antwort

1

Es hängt wirklich von mehreren Faktoren ab: Welches OS, welche gemeinsame Bibliothek und was die Anwendung tatsächlich tut. Möglicherweise auch wie die Shared Library aufgebaut ist.

Im Allgemeinen ist es keine besonders große Strafe, da shared Libraries bedarfsgeladen sind und eine positionsunabhängige Adressierung [PIC] verwenden (PC-relativ und ähnlich). Dies bedeutet, dass die gemeinsam genutzte Bibliothek nur geladen wird, wenn sie tatsächlich verwendet wird, und dass es "keine Arbeit" gibt, die Bibliothek zu laden. Dies ist etwas, worüber OS-Designer und Systemarchitekten viel nachdenken, denn für viele Anwendungen, die leistungsabhängig sind (zum Beispiel Compiler oder Web-Services), wird ein schlecht konzipiertes System mit gemeinsam genutzten Bibliotheken die Leistung BAD machen.

Es ist natürlich möglich, beim Erstellen der gemeinsam genutzten Bibliothek zu konfigurieren. Zumindest die Verwendung von PIC Aspekt von diesem, also wenn die Person/Firma, die den Build der Shared Library "will" zu konfigurieren, könnte es schlecht konfiguriert und schlimmer als Null-Effekt sein.

Dazu müssen Sie jede Initialisierung hinzufügen, die die gemeinsam genutzte Bibliothek tut. Gut entworfene shared libraries tun "auf Anfrage" oder "faul" Initialisierung, mit anderen Worten, macht nicht viel Initialisierung, bis es tatsächlich benötigt wird. Auch hier können die Details der einzelnen Bibliotheken - einschließlich der Konfiguration, als sie erstellt wurde - einen großen Unterschied machen.

Die einzige wirkliche Möglichkeit, in einem bestimmten Anwendungsfall zu sagen, ist "mit" und "ohne" die zusätzliche gemeinsame Bibliothek zu bauen und die tatsächliche Leistung zu messen.

Verwandte Themen