[c++] Statische oder dynamische Verknüpfung von CRT, MFC, ATL usw.



2 Answers

Die meisten Antworten, die ich hier höre, beinhalten das Teilen Ihrer DLLs mit anderen Programmen oder das Aktualisieren dieser DLLs, ohne dass Ihre Software gepatcht werden muss.

Ehrlich gesagt, halte ich diese für Nachteile und nicht für Vorteile. Wenn eine Drittanbieter-DLL aktualisiert wird, kann sich diese so ändern, dass Ihre Software beschädigt wird. Und heutzutage ist der Festplattenspeicher nicht mehr so ​​kostbar, wie er einmal war, zusätzliche 500k in Ihrer ausführbaren Datei? Wen interessiert das?

  • Sich der Version von dll, die Ihre Software verwendet, 100% sicher ist, ist eine gute Sache.
  • 100% sicher zu sein, dass der Klient keine Abhängigkeit Kopfschmerzen haben wird, ist eine gute Sache.

Die Vorteile überwiegen bei weitem die Nachteile meiner Meinung nach

Question

In den 90er Jahren, als ich mit MFC anfing, habe ich meine Apps dynamisch verknüpft und die relevanten MFC-DLLs ausgeliefert. Das hat mir ein paar Probleme bereitet (DLL Hell!) Und ich bin stattdessen auf statisches Linken umgestiegen - nicht nur für MFC, sondern für CRT und ATL. Anders als größere EXE-Dateien hat mir die statische Verknüpfung überhaupt keine Probleme bereitet - gibt es also irgendwelche Nachteile, die andere Leute bemerkt haben? Gibt es einen guten Grund, die dynamische Verlinkung noch einmal zu überdenken? Meine Apps sind heute hauptsächlich STL / Boost FWIW.




Ganz sicher.

Die Zuweisung erfolgt auf einem 'statischen' Heap. Da eine Zuordnungsfreigabe auf demselben Heap erfolgen sollte, bedeutet dies, dass Sie, wenn Sie eine Bibliothek p = new LibClass() , darauf achten sollten, dass der Clientcode nicht 'Ihre' p = new LibClass() und dieses Objekt selbst mit delete p; ..

Meine Schlussfolgerung: entweder Schildzuweisung und Freigabe von Client-Code, oder die CRT dynamisch verknüpfen.




Eine gute Eigenschaft der Verwendung von DLLs ist, dass, wenn mehrere Prozesse die gleiche DLL lädt der Code zwischen ihnen geteilt werden kann. Dies kann Speicher sparen und die Ladezeiten verkürzen, wenn eine Anwendung eine DLL lädt, die bereits von einem anderen Programm verwendet wird.




Related



Tags

c++ c++   mfc   linker