Kann der Prozessor auf DLLs schneller zugreifen, als auf seinen eigenen Programmcode?



  • Ich hab schon des Öfteren erlebt, dass beim Installieren einer Software, eine Meldung kam, dass eine bestimmte DLL fehlt, aber ich frage mich, warum man nicht einfach den Quelltext aus diesen DLL in seinen Programmcode kopiert, so bräuchte man nur die .exe-Datei und nicht noch zusätzliche 1000 weitere DLLs, irgendeinen Vorteil müssen die Bibliotheken ja hinsichtlich Schnelligkeit haben 😉 .



  • DLLs liegen nur einmal im Speicher.
    Sehr gut zum Beispiel beim MS-Office, wenn man Word und Excel und Powerpoint und Frontpage aufmacht und alle vier lauter gemeinsame DLLs benutzen.

    Aber in kleineren Progekten wird es völlig übertrieben angewendet. Nubes denken, man müsse eine selber geschrieben Bibliothek immer als DLL machen, was gar nicht wahr ist, sondern nur stört. Ein serh schönes Beispiel ist PGP, was aus einer exe und einem Dutzend libs besteht, aber die libs werden schon statisch eingelinkt.

    Manchmal verpflichtet einen der fremde Lib-Hersteller, sie als DLL einzulinken, zum Beispiel fmod in der kostenlosen Version. Dann muß man halt exe und DLL ausliefern.



  • Es gibt noch einen weiteren Vorteil gegenüber DLLs: sie sind austauschbar. Stell dir vor, in einem richtig großen Programm gibt es einen Fehler, welcher nur auf ein einziges Modul zurückzuführen ist. Du behebst den Fehler und darfst dann hinterher das Programm noch mal völlig neu kompilieren. 🙂 In Zeiten des schnellen Internets eigentlich nicht mehr ein so großes Problem, aber wenn du das Ganze als Patch auf deinem Server anbieten willst, können die Traffic-Kosten beißen.

    Mit DLLs ist das einfacher. Du schmeißt ein einzelnes Modul in ein Archiv, bietest es an, und fertig. Keinen unnötigen Traffic verursacht. Dein Provider wird es dir danken. 😉



  • Bei DLLs denke ich eher an Plugin-Systeme.



  • Pi, wenn du an DLLs denkst, denkst du an Dynamic Shared Objects. Du weisst bloss anscheinend noch nicht dass das zwei unterschiedliche Dinge sind.



  • volkard schrieb:

    Aber in kleineren Progekten

    Ist das die offizielle Bezeichnung, solange ein Projekt noch nicht groß genug ist, ist es nur ein Progekten, was vom proggen kommt?



  • Von klein nach gross:
    Progekt
    Prohekt
    Projekt
    Prokekt
    Prolekt



  • Das könnte eine Frage an 'Radio Eriwan' sein! 🙂 Antwort: Im Prinzip ja, aber '.........'
    DLLs können das System nicht ausbremsen oder alles liegt im vernachlässigbarem Bereich. Bereits der Compiler und der Linker benutzen einen Haufen solcher DLLs, ohne die nichts läuft.
    Was war denn nun genau die Frage? 😕



  • hustbaer schrieb:

    Pi, wenn du an DLLs denkst, denkst du an Dynamic Shared Objects. Du weisst bloss anscheinend noch nicht dass das zwei unterschiedliche Dinge sind.

    Ich muss gestehen, durch googeln konnte ich keinen Unterschied feststellen.



  • hustbaer schrieb:

    Von klein nach gross:
    Progekt
    Prohekt
    Projekt
    Prokekt
    Prolekt

    project



  • 314159265358979 schrieb:

    hustbaer schrieb:

    Pi, wenn du an DLLs denkst, denkst du an Dynamic Shared Objects. Du weisst bloss anscheinend noch nicht dass das zwei unterschiedliche Dinge sind.

    Ich muss gestehen, durch googeln konnte ich keinen Unterschied feststellen.

    Ja, deswegen stellst du auch ne Frage zum Thema DLLs, und gibst dann ne schnippische Antwort vonwegen so nen Dreck wie Windows verwendest du nicht, wenn jmd. eine Windows-spezifische Antwort gibt. 👍



  • Ich hätte dich eigentlich so eingeschätzt, dass du mir nicht gleich wieder blöd kommst. Naja, war wohl ein Fehler.



  • *seufz*

    Du bist schon reichlich zimperlich.

    Nimm einfach den folgenden Informationsbrocken mit: mit DLL ist meist eine Shared Library im PE-Format gemeint, die mit Windows verwendet wird. Und wenn was anderes gemeint ist, dann sollte man auch eher nicht DLL schreiben, da man sonst schnell falsch verstanden wird.



  • Och, als Nicht-Windowsler schmeckt zwar das Wort bitter, man hat sich aber daran gewöhnt dass DLL auch eine Bezeichnung für dynamische Bibliotheken unter Unix ist.



  • hustbaer schrieb:

    Pi, wenn du an DLLs denkst, denkst du an Dynamic Shared Objects. Du weisst bloss anscheinend noch nicht dass das zwei unterschiedliche Dinge sind.

    Ich verstehe den Unterschied aber auch nicht.

    wikipedia schrieb:

    A dynamically linked library (dynamic-link library or DLL under Windows and OS/2; dynamic shared object or DSO under Unix-like systems) is a library intended for dynamic linking

    Hiernach ist "Dynamic Shared Object" einfach die Unix-Bezeichnung für DLLs.

    Ich denke, ich kenne DLLs nur als "Shared Library im PE-Format". Was wäre das andere?



  • Der Unterschied ist, dass eine DLL im PE Format vorliegt, und ein SO unter Linux im ELF Format.

    Und dass unterschiedliche Features unterstützt werden.

    Unter Linux kann ich ein und das selbe Symbol in 100 SOs reincompilieren, und diese 100 gleichen dann beim Laden zusammenfassen lassen. So dass z.B. ne inline Funktion die in 100 SOs vorkommt trotzdem überall die selbe Adresse hat.
    Oder statische Variablen von Templates pro Template-Instanz auch nur 1x existieren, und nicht 1x pro SO.

    Mit DLLs geht das z.B. nicht.

    @Ethon
    Naja...
    Wenn ich nen Artikel lese wo was von Linux und DLLs steht, dann gehe ich auch nicht unbedingt davon aus dass der Author jetzt WINE laufen hat, und "echte" DLLs im PE Format meint.
    Wenn aber irgendwo nur "DLL" steht, ohne dass ein OS erwähnt wird ... ich kann mich irgendwie grad an keinen Fall erinnern, wo dann nicht Windows gemeint war.


Anmelden zum Antworten