Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Werden leere Proceduren in exe gelinkt? (https://www.delphipraxis.net/87161-werden-leere-proceduren-exe-gelinkt.html)

sniper_w 24. Feb 2007 08:45


Werden leere Proceduren in exe gelinkt?
 
Mal angenommen:
Delphi-Quellcode:
procedure Foo(param: Integer param2: string);
begin
// ;-) bin halt leer
end;
Kann mir jemand sagen ob eine solche Funktion auch gelinkt wird ?

EDIT:
Ja die wird irgenwo im Code aufgerufen.

mschaefer 24. Feb 2007 09:11

Re: Werden leere Proceduren in exe gelinkt?
 
Moin, moin!

Da sie aufgerufen wird, wird sie gelinkt sowohl bei Delphi als auch bei C.

Würde Sie nicht aufgerufen, würde ein C-Linker diese filtern und nicht linken. Der Pascal-Linker ist etwas in die Jahre gekommen und linkt immernoch komplette Units und versucht überhaupt keine Routinenfilterung. Das Verhalten war viele Jahre eine der Stärken von Turbo-Pascal. Der Compiler-Linker-Lauf war vergleichsweise zu C++ geradezu rasant, was das Testen von Änderungen im Programm auch auf untermotorisierten Computern sehr gut möglicht machte. Bei den heutigen Rechnergeschwindigkeiten währe ein filternder Linker kein Problem mehr, aber die heutigen Ramgrößen machen ihn auch nicht unbedingt nötig.

Grüße // Martin

Flocke 24. Feb 2007 14:40

Re: Werden leere Proceduren in exe gelinkt?
 
Zitat:

Zitat von mschaefer
Der Pascal-Linker ist etwas in die Jahre gekommen und linkt immernoch komplette Units und versucht überhaupt keine Routinenfilterung.

Das stimmt nicht: der Turbopascal/Delphi-Linker entfernt seit jeher unreferenzierten Code auf Prozedurebene.

Einfach mal eine unbenutzte Funktion in eine Unit reinkopieren, übersetzen und wundern, dass man darin keine Haltepunkte setzen kann ;)

Muetze1 24. Feb 2007 16:54

Re: Werden leere Proceduren in exe gelinkt?
 
... aber nur, wenn die Optimierung eingeschaltet ist. Mit deaktivierter Optimierung wird alles 1:1 übernommen, wie vom User gewünscht (in Form von Quellcode).

3_of_8 24. Feb 2007 16:58

Re: Werden leere Proceduren in exe gelinkt?
 
...aber die ist standardmäßig an.

Daniel G 24. Feb 2007 17:04

Re: Werden leere Proceduren in exe gelinkt?
 
...was aber vollkommen Latte ist, wenn es um eine prinzipielle Frage geht. Insofern haben beide in gewisser Weise Recht und alle sind glücklich... :mrgreen:

mschaefer 24. Feb 2007 17:45

Re: Werden leere Proceduren in exe gelinkt?
 
Danke, das war es dann!

Habe mal ein Delphi 6 Projekt im CBuilder 6 übernommen. Erstaunlicherweise war die damit generierte ex um ein Drittel kleiner bei gleicher Funktionalität und fast gleicher VCL.

Grüße // Martin

Hawkeye219 24. Feb 2007 19:06

Re: Werden leere Proceduren in exe gelinkt?
 
Hallo,

unbenutzte Routinen werden auch bei ausgeschalteter Optimierung vom Linker entfernt, man kann dies leicht überprüfen, wie Flocke bereits in Beitrag #3 beschrieben hat. Da aber der INITIALIZATION-Teil von verwendeten Units immer eingebunden wird, kann die entstehende .exe-Datei durchaus Code enthalten, der vom Programmierer nicht direkt aufgerufen wird, sondern nur durch die Initialisierungs-Abschnitte. Auch eine leere Routine wird nicht wegoptimiert, sofern sie referenziert wird.

Gruß Hawkeye

Daniel G 24. Feb 2007 19:09

Re: Werden leere Proceduren in exe gelinkt?
 
Zitat:

Zitat von Hawkeye219
Da aber der INITIALIZATION-Teil von verwendeten Units immer eingebunden wird, kann die entstehende .exe-Datei durchaus Code enthalten, der vom Programmierer nicht direkt aufgerufen wird, sondern nur durch die Initialisierungs-Abschnitte.

Stimmt, da war was. Und wenn ich mich recht entsinne, ist das auch der Hintergrund, warum die Programme mit der VCL immer so riesig werden. Da sind die Initialization-Abschnitte nämlich ziemlich groß.

mschaefer 24. Feb 2007 21:40

Re: Werden leere Proceduren in exe gelinkt?
 
Hm etwas bin ich da noch am Grübeln.

Also die Sache mit Initalization und Finalization einer Unit gibt es meines Erachtens so ab D3, aber die D1 und D2 Exe´n waren auch schon reichlich, groß obwohl die noch keine Unit initialization gehabt haben können. Oder war da der Interface-Abschnitt gemeint?^

PS 1 sst:
Wenn man mal mit dem Hexeditor auf eine D-Exe geht, sieht man alle Variablennamen im puren Ascii-Format. Da wird nichts verborgen und komprimiert. Fazit je länger der Variablenname, desto gräßer die Exe. Normalerweie müßte da ein Pointer auf eine Speicherstelle reichen.

PS 2 sst:
Delphi bindet alle Resseourcen die in eingebundenen Units angegeben sind ein. Egal ob diese wirklich benutzt werden oder nicht.
Das macht die Programme auch nicht kleiner


Grüße // Martin


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:02 Uhr.

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