Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wird eine Unit mehrfach im Programm eingebunden? (https://www.delphipraxis.net/178766-wird-eine-unit-mehrfach-im-programm-eingebunden.html)

Popov 26. Jan 2014 14:56

Wird eine Unit mehrfach im Programm eingebunden?
 
Passend zu meiner Frage nach genulltem Objektspeicher, hier eine weitere kleinen Frage:

Wenn ich zwei Units habe und in beiden z. B. die SysUtils unter Uses einbinde, wie behandelt der Compiler das? Wird die SysUtils mehrfach eingebunden oder letztendlich auch nur einmal?

Uwe Raabe 26. Jan 2014 15:13

AW: Wird eine Unit mehrfach im Programm eingebunden?
 
Nur einmal.

himitsu 26. Jan 2014 16:30

AW: Wird eine Unit mehrfach im Programm eingebunden?
 
Du wolltest wohl darauf hinausgehen, ob die globalen Variablen dann mehrfaht vorhanden sind?
Hätte man sich eigentlich denken können, daß es so totaler Blödsinn währe,
denn es würde ja dem Sinn wiedersprechen, den Code gemeinsam zu verwenden. :zwinker:

Beim Kompilieren mit Packages, wird beim Laden der BPLs und der ladenden BPL/DLL/EXE auch gemeckert, wenn eine Unit mehrfach einkonpiliert wurde. Also in "beiden" BPL/DLL/EXE.

Aber wenn man zwar mit Packages arbeitet, aber die Unit vergssen hat in eine BPL aufzunhmen, dann läßt sich diese Unit in zwei/mehrere DLL/EXE einkompilieren und jeder hat seine eigene Instanz von globalen Variablen.



Setll dir mal vor, wie viele tausende Male z.B. die SysUtils in der VCL einkompiliert währe.

Popov 26. Jan 2014 17:12

AW: Wird eine Unit mehrfach im Programm eingebunden?
 
Zitat:

Zitat von himitsu (Beitrag 1245410)
Du wolltest wohl darauf hinausgehen, ob die globalen Variablen dann mehrfaht vorhanden sind?

Eigentlich nicht. Eigentlich wollte ich nur die Bestätigung, dass Units nicht mehrfach eingebunden werden. Das war auch vorher meine Annahmen, nur eben keine bestätigte Kenntnis.

Der Grund für meine Frage ist/war, weil ich in einer fremden Unit (nicht von Borland), die eigentlich sonst sehr gut programmiert war, einige Standard-Units per Compilerdirektiven eingebunden wurden, also Windows, SysUtils, usw.

Das ganze ergibt durchaus Sinn (zumindest je länger ich darüber nachdenke), denn abhängig von einigen Bedingungen werden einige Teile der Unit nicht benötigt, somit auch nicht die dazugehörigen Units.

Trotzdem, das sind Standard-Units die fast in jedem Programm auftauchen. Nicht dass ich per se in eine leere Unit Standard-Units einbinde, aber sind die ein mal drin, zumindest die üblichen Units, dann werfe ich SysUtils nicht später wieder raus, nur weil ich zuletzt dann doch nicht die StrToInt Funktion benötige. Denn wenn nicht hier, dann ist sie irgendwo anders eingebunden.

Also muss derjenige ein "Optimierungsfanatiker" sein, wenn er sogar solche Unit-Einbindung steuert.

himitsu 26. Jan 2014 17:31

AW: Wird eine Unit mehrfach im Programm eingebunden?
 
In der Unit Windows gibt es eigentlich keine globalen Dinge, somit lohnt es sich nicht die wegzulassen.

Aber es gibt einige NonVCL-Programmierer, welche Programme ohne die SysUtils erstellen, um möglichst kleine EXEn zu erzeugen.
Wenn nun eine Fremdkomponente diese Unit dennoch nutzt, dann "können"/wollen sie diese nicht verwenden.

Bei der SysUtils werden im Initialization so einige Sachen gemacht, die irgendwelche Dinge laden (und natürlich wird alles dazugehörige ins Programm einkompiliert) und dafür sorgen, daß so Einiges am laufenen Programm verändert werden, wie z.B. die Exceptionbehandlung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz