AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Werden leere Proceduren in exe gelinkt?
Thema durchsuchen
Ansicht
Themen-Optionen

Werden leere Proceduren in exe gelinkt?

Ein Thema von sniper_w · begonnen am 24. Feb 2007 · letzter Beitrag vom 24. Feb 2007
Antwort Antwort
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#1

Werden leere Proceduren in exe gelinkt?

  Alt 24. Feb 2007, 09:45
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.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#2

Re: Werden leere Proceduren in exe gelinkt?

  Alt 24. Feb 2007, 10:11
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
Martin Schaefer
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Werden leere Proceduren in exe gelinkt?

  Alt 24. Feb 2007, 15:40
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
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Werden leere Proceduren in exe gelinkt?

  Alt 24. Feb 2007, 17:54
... aber nur, wenn die Optimierung eingeschaltet ist. Mit deaktivierter Optimierung wird alles 1:1 übernommen, wie vom User gewünscht (in Form von Quellcode).
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Werden leere Proceduren in exe gelinkt?

  Alt 24. Feb 2007, 17:58
...aber die ist standardmäßig an.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#6

Re: Werden leere Proceduren in exe gelinkt?

  Alt 24. Feb 2007, 18:04
...was aber vollkommen Latte ist, wenn es um eine prinzipielle Frage geht. Insofern haben beide in gewisser Weise Recht und alle sind glücklich...
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#7

Re: Werden leere Proceduren in exe gelinkt?

  Alt 24. Feb 2007, 18:45
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
Martin Schaefer
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Werden leere Proceduren in exe gelinkt?

  Alt 24. Feb 2007, 20:06
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
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#9

Re: Werden leere Proceduren in exe gelinkt?

  Alt 24. Feb 2007, 20:09
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ß.
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#10

Re: Werden leere Proceduren in exe gelinkt?

  Alt 24. Feb 2007, 22:40
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
Martin Schaefer
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:36 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