Verständnis frage zu DLL ???
-
Ich bin Abiturient und stecke im 2.Semester, ich bin also noch kein Entwickler in dem Sinne, ich bringe mir das hier alles nur shcon mal mit eigenstudium bei, und schreibe hier und da mal nen kleines Programm um die verschiedenen Anwendungsweisen mal gehabt zu haben, doch letztendlich möchte ich auch wissen wieso das so ist und deswegen der post.
also meines erachtens sind DLL nur speicher schonend weil in ihnen eine schon komplett übersetzte Funktion enthalten ist oder wie? so waere es auch besser variablen in DLL zu packen weil die dann auch kein Speicher fressen oder wie?Gruß Tobi.
-
Nein, Variablen werden natürlich für jedes Programm extra Speicher verbrauchen. Bei dem Speicherverbrauch durch DLLs geht es nur um den Programmcode.
-
Artchi schrieb:
...wenn die DLLs systemweit erreichbar sind, und nicht wie bei vielen Programmen im jeweiligen Programmverzeichnis liegen (das ist der größte Unsinn einer DLL-Nutzung!). Wenn dann bitte die DLLs auch in einem Zielordner ablegen, wo jedes Programm einen Nutzen davon hat....
Prinzipiell stimme ich Dir zu, aber damit schaffst Du natürlich auch eine Kopplung, die Dir zu schaffen machen kann. Du musst nämlich höllisch auf Kompatibilität der verschiedenen Versionen aufpassen....
Das ist tw. in der Unixwelt dadurch gelöst, dass man in die Namen der "DLLs" die Versionen aufnimmt und das entsprechend konfigurieren kann, aber wenn (wie allermeistens umgesetzt) immer ein fester Name gesucht wird, wird's schnell haarig.
Das ist bisweilen ein Grund, warum ich lieber libs verwende ... da habe ich im Ergebnis auch nur den Speicherplatz der Funktionen, die ich wirklich brauche (und nicht alle - wie bei der DLL), die zwar bisweilen mehrfach im Speicher, aber auch keine Kompatibilitätskonflikte.Langer Rede kurzer Sinn: DLLs sind auch kein Allheilmittel, sondern wollen mit Bedacht eingesetzt werden.
Gruß,
Simon2.
-
Naja, DLL-Versionierung gibts ja zum Glück seit WinXP auch schon. Deshalb braucht man ja die Manifestdatei, wo man die DLL-Version der C-Runtime usw. einträgt. Vorausgesetzt, die DLLs sind versioniert (unversionierte DLLs lassen sich natürlich weiterhin nutzen, und dann tritt das von dir genannte Problem auf).
Muß aber zugeben, das ich mich ansonst mit den versionierten DLLs unter WinXP nicht weiter beschäftigt habe, weil ich selber keine DLLs erstelle (immer nur LIBs).
-
da habe ich im Ergebnis auch nur den Speicherplatz der Funktionen, die ich wirklich brauche (und nicht alle - wie bei der DLL), die zwar bisweilen mehrfach im Speicher, aber auch keine Kompatibilitätskonflikte.
Stimmt! Im optimalen Fall, ist der Linker so schlau, und linkt nur die Funktionen/Klassen, die ich auch aus der LIB verwende. Kann man beim MSVC auch beobachten, das meistens die EXE extrem kleiner ist, als die LIB.
Ja, ist schon ne schwierige Entscheidung.

-
hmm und wie werde ich mir letztendlich beweusst, wann ich eine DLL benutze und nicht eine header???
Gruß Tobi.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hallo
Der Aufwand eine DLL anzulegen ist wesentlich größer als eine Headerdatei (wie gesagt Übersetzungseinheit ist ein treffenderer Begriff).
Für eine DLL muß im allgemeinen ein neues Projekt/Makefile angelegt werden, so das es völlig unabhängig vom Projekt/Makefile des benutzenden Programmes ist.bis bald
akari
-
hmm, also ich schluss folgere daraus mal das DLL's eigentlich total fürn garten ist oder wie?, und ich mir eigentlich keinerlei mühe machen müsste mir jemals eine dLL zu baun, wenns nen header genauso tut....
Gruß Tobi.
-
Hallo
Es wurden genug Beispiele genannt die DLLs notwendig machen.
bis bald
akari
-
Übrigens können Windows-DLLs mit C++-Code schnell zu Problemen führen, vor allem wenn man auch noch zwei verschieden Compiler oder Compiler-Versionen benutzt. Für Windows gibt es keine definierte C++-ABI, jeder Compiler bzw Compiler-Version macht da was eigenes. Dann gibt es wohl auch Probleme mit Exceptions und Speicher-Verwaltung über Programm/DLL-Grenzen.