![]() |
Werden leere Proceduren in exe gelinkt?
Mal angenommen:
Delphi-Quellcode:
Kann mir jemand sagen ob eine solche Funktion auch gelinkt wird ?
procedure Foo(param: Integer param2: string);
begin // ;-) bin halt leer end; EDIT: Ja die wird irgenwo im Code aufgerufen. |
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 |
Re: Werden leere Proceduren in exe gelinkt?
Zitat:
Einfach mal eine unbenutzte Funktion in eine Unit reinkopieren, übersetzen und wundern, dass man darin keine Haltepunkte setzen kann ;) |
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).
|
Re: Werden leere Proceduren in exe gelinkt?
...aber die ist standardmäßig an.
|
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:
|
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 |
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 |
Re: Werden leere Proceduren in exe gelinkt?
Zitat:
|
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