Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Mindestgröße eines Programms (https://www.delphipraxis.net/66352-mindestgroesse-eines-programms.html)

Chris P 28. Mär 2006 21:31


Mindestgröße eines Programms
 
Hi Leute,

ich kann nicht verstehen warum ein mit Delphi compiliertes Programm mit folgendem Inhalt
Delphi-Quellcode:
program test;

begin
end;
mehr kByte hat, als manche andere Programme die ich im Internet finde, die auch mit Delphi compiliert wurden.

Oben das Programm beinhaltet weder eine Unit noch Prozeduren, Funktionen, etc.

Das oben genannte Programm bzw. die EXE hat 13,5 kByte.
Ich hab aber auch schon Delphi EXE-Dateien gesehen die z.B. nur 7 kByte hatten und viel mehr Code enthielten.

Woran liegt das?

mkinzler 28. Mär 2006 21:32

Re: Mindestgröße eines Programms
 
Das liegt an den eingebunden Libraries (bpls).

3_of_8 28. Mär 2006 21:34

Re: Mindestgröße eines Programms
 
Außerdem ist die Unit System immer eigebunden. Und Programme lassen sich mit UPX z.B. leicht komprimieren.

Chris P 28. Mär 2006 21:37

Re: Mindestgröße eines Programms
 
@mkinzler: Wo werden diese Libraries eingebunden?

@3_of_8: Wo finde ich dieses UPX?

Danke schonmal...

3_of_8 28. Mär 2006 21:44

Re: Mindestgröße eines Programms
 
In der DP Suche oder bei Google.

Aber ich bin heute mal nicht so: http://upx.sourceforge.net/

Matze 28. Mär 2006 21:45

Re: Mindestgröße eines Programms
 
Zitat:

Zitat von Chris P
@3_of_8: Wo finde ich dieses UPX?

Bei Google suchenUPX ist ein externer Exe-Packer, aber meistens weniger zu empfehlen, da vorm Ausführen der Anwendung diese in den RAM entpackt werden muss. Im Normalfall ist der Start langsamer, was allerdings nur bei größeren Anwendungen bemerkbar ist und andererseits steigt die RAM-Auslastung.
UPX ist folglich keine Lösung, die man unüberlegt verwenden sollte. Die direkt von Delphi erzeugte Anwendung bleibt auch gleich groß, da UPX nichts mit Delphi selbst zu tun hat, sonden nachträglich auf die Exe angewendet wird, folglich ist UPX keine Lösung auf deine eigentliche Frage. ;)

mkinzler 28. Mär 2006 21:50

Re: Mindestgröße eines Programms
 
Zitat:

@mkinzler: Wo werden diese Libraries eingebunden?
Unter Projekt-Optionen

Daniel G 28. Mär 2006 21:51

Re: Mindestgröße eines Programms
 
NicoDE hatte da mal was.... Ist aber mehr Theorie...

http://www.bendlins.de/nico/delphi/MiniDExe.zip

Chris P 28. Mär 2006 22:01

Re: Mindestgröße eines Programms
 
Wie schafft NicoDE es, die EXE auf 4,5 Byte zu kriegen?

Unter Projekt-->Optionen finde ich nichts zu Libraries...

Daniel G 28. Mär 2006 22:07

Re: Mindestgröße eines Programms
 
Zitat:

Zitat von Chris P
Wie schafft NicoDE es, die EXE auf 4,5 Byte zu kriegen?

Guck dir mal die build.cmd an. Außerdem die Dateien "SysInit.pas", "System.pas" und "Windows.pas". Übrigens sind es 4,5 KByte :zwinker:

Chris P 28. Mär 2006 22:09

Re: Mindestgröße eines Programms
 
ja sorry kByte, is schon spät... :wink:

Chris P 28. Mär 2006 22:14

Re: Mindestgröße eines Programms
 
Ich werde leider nicht schlau, was diese .cmd genau macht...

Luckie 28. Mär 2006 22:17

Re: Mindestgröße eines Programms
 
Das:
Code:
@ECHO OFF
IF (%OS%) == (Windows_NT) SETLOCAL
SET PATH=\borland\delphi9\bin;%PATH%

FOR %%i IN (Hello?.exe) DO DEL %%i
FOR %%i IN (*.dcu) DO DEL %%i

REM -- ANSI --

dcc32.exe -Q System -M -y -Z -$D-
dcc32.exe -Q SysInit -M -y -Z -$D-
ECHO.
dcc32.exe Hello.dpr
ECHO.
FOR %%i IN (*.dcu) DO DEL %%i

bin\ResHacker -delete Hello.exe,Hello.exe,RCDATA,DVCLAL, > NUL
bin\ResHacker -delete Hello.exe,Hello.exe,RCDATA,PACKAGEINFO, > NUL
bin\StripReloc /B /C Hello.exe > NUL
MOVE Hello.exe HelloA.exe
HelloA.exe
ECHO ExitCode: %ERRORLEVEL%
ECHO.

REM -- UNICODE --

dcc32.exe -Q System -M -y -Z -$D- -DUNICODE
dcc32.exe -Q SysInit -M -y -Z -$D- -DUNICODE
ECHO.
dcc32.exe Hello.dpr -DUNICODE
ECHO.
FOR %%i IN (*.dcu) DO DEL %%i

bin\ResHacker -delete Hello.exe,Hello.exe,RCDATA,DVCLAL, > NUL
bin\ResHacker -delete Hello.exe,Hello.exe,RCDATA,PACKAGEINFO, > NUL
bin\StripReloc /B /C Hello.exe > NUL
MOVE Hello.exe HelloW.exe
HelloW.exe
ECHO ExitCode: %ERRORLEVEL%
ECHO.

IF (%OS%) == (Windows_NT) ENDLOCAL
PAUSE
Aber das ist nebensächlich. Hauptsächlich liegt es daran, dass er selbstgeschriebene System.pas und SysInit.pas Units benutzt hat, die wirklich nur das Nötigste enthalten.

Daniel G 28. Mär 2006 22:22

Re: Mindestgröße eines Programms
 
Nee, so nebensächlich ist es wohl nicht. Drück ich bei D2005 einfach auf F9, dann ist die Exe trotzdem 15 kb groß. Starte ich die *.cmd, sind beide 5 kb groß...

Chris P 28. Mär 2006 22:27

Re: Mindestgröße eines Programms
 
Ok, soweit verstehe ich es!

Jetzt müsste ich nur noch wissen wo die System.pas und SysInit.pas eingebunden werden wenn ich dies
nicht in meinem Programm mache?

Unter Projekt-->Optionen finde ich nichts.

ichbins 28. Mär 2006 22:30

Re: Mindestgröße eines Programms
 
du musst die Dateien im Lib-Verzeichniss (auch die DCUs) durch die neuen Ersetzen.

//edit: vllt solltest du die Originaldateien nicht wirklich löschen sondern nur verschieben ;)

Luckie 28. Mär 2006 22:32

Re: Mindestgröße eines Programms
 
Zitat:

Zitat von Daniel G
Nee, so nebensächlich ist es wohl nicht. Drück ich bei D2005 einfach auf F9, dann ist die Exe trotzdem 15 kb groß. Starte ich die *.cmd, sind beide 5 kb groß...

Ich wollte damit ausdrücken, dass die Hauptarbeit die eigenen System Units sind, die es letztendlich ausmachen. Die cmd Datei sorgt nur dafür, dass sie auch benutzt werden.

Daniel G 28. Mär 2006 22:33

Re: Mindestgröße eines Programms
 
Hmm...

Ja, stimmt, macht irgendwie Sinn...

Chewie 28. Mär 2006 22:34

Re: Mindestgröße eines Programms
 
Die beiden Units werden immer eingebunden, auch wenn sie nicht explizit gelistet sind.

Chris P 28. Mär 2006 22:37

Re: Mindestgröße eines Programms
 
Gut, dann danke erstmal...

Ich werde es probieren und mich bei Problemen nochmal melden!

FriFra 28. Mär 2006 22:41

Re: Mindestgröße eines Programms
 
Zitat:

Zitat von Matze
. Im Normalfall ist der Start langsamer, was allerdings nur bei größeren Anwendungen bemerkbar ist und andererseits steigt die RAM-Auslastung.

Warum sollte der Start langsamer sein? Der Flaschenhals liegt hier doch beim Zugriff auf die Festplatte! Das Entpacken im Arbeitsspeicher sollte IMHO deutlich schneller gehen, somit sollte eine UPX gepakte Anwendung schneller geladen sein. Anders sieh es natürlich mit dlls aus...

sakura 28. Mär 2006 22:46

Re: Mindestgröße eines Programms
 
Zitat:

Zitat von FriFra
Warum sollte der Start langsamer sein?

Da bei UPX immer die ganze EXE geladen werden muss, wohingegen bei einer nicht gepackten Exe nur der Header und der Einsprung geladen werden. Alle Resourcen werden on-demand von der Platte gelesen. Und bei kleineren Programmen ist die Festplatte auch keine Bremse, da moderne schnell mal 16 MB in einem Rutsch lesen und cachen, egal ob Du 1KB willst oder 100 MB.

...:cat:...

FriFra 28. Mär 2006 22:48

Re: Mindestgröße eines Programms
 
ok, überredet ;) ... es ist schon spät :nerd:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 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