Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jul 20, 2025 13:19

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Delphi und EXE-Größe
BeitragVerfasst: Mi Sep 03, 2003 11:39 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Da es immer wieder zu dem Thema "EXE-Größe und Delphi" sowie "SysUtils Ja/Nein" diverse diskussionen gibt und ich in letzter Zeit (mehr oder weniger zufällig) ein paar Infos zu diesem Thema bekan, wollt' ich die einfach mal weitergeben:

1.) Delphi verwendet einen SmartLinker. Das bedeutet, das wirklich NUR verwendete Funktionen/Objekte/Variablen in die EXE eingelinkt werden. Folglich kann man problemlos SysUtils verwenden, ohne gleich alles mit drinnen zu haben! Delphi bekommt sogar mit, wenn ein Code nie ausgeführt wird und linkt diesen dann enbenfalls nicht mit in die EXE. So wird der folgende Code:
Code:
  1.  
  2.   if True = False then
  3.   begin
  4.     Application.MessageBox('Warum kommt das?', 'Hallo', MB_OK);
  5.   end;
  6.  

vom Linker einfach ignoriert.

2.) Wenn man die Unit Forms einbindet, dann hat man gleich eine mächtig große EXE-Datei. Der Grund ist, weil Delphi a) einige Resource gleicht miteinlinkt (Bitmaps, Strings, Mouse-Cursor etc.) und b) Die Forms Unit diverse Initialisierungen vornimmt (z.B. das Application-Objekt, welches dann natürlich diverse Funktionen benötigt).

Für alle, die mich nicht glauben hab' ich eine kleine Test-App geschrieben. Einfach die ZIP-Datei entpacken und mit Hilfe von MKBIG.BAT oder MKSMALL.BAT die verschiedenen Versionen kompilieren. Dabei wird lediglich per Define festgelegt, welche Funktion in der Unit Test.pas verwendet werden soll. Hierbei ist schön ersichtlich, wie Delphi zwar die Unit kompiliert, aber wirklich nur das verwendete Material in der EXE landet.

WARNUNG: Nach dem Entpacken hat man eine Test.pas mit einer Größe von ca. 20 MB! Diese enthällt über 1Mio Zeilen Code! (Schön zu sehen, wie schnell Delphi kompiliert ;)) In der BIG-Version der EXE hat diese dann 10MB, in der Small-Version nur ca. 400 KB!

Happy Testing ;)


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 03, 2003 12:57 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
haha.... nichts was ich nicht schon wusste ;-) das Problem bei SysUtils sit, dass sie selbst eine ganze Reihe an Text-Resourcen mit sich herumträgt was die exe ein wenig aufbläht,d er code selsbt wäre nicht soo wild. Aber in Zeiten, wo eigentlich jeder ein 33k Modem hat, machen ein paar 100kb mehr oder weniger auch nichts aus, aber das vergessen die emsiten halt - naja.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 03, 2003 13:03 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Und letztlich werden ja alle Dateien als ZIP runtergeladen und deshalb braucht man sich um die Größe der EXE Datei sowieso keine Sorgen zu machen und deshalb sogar auf die ganzen Standard Units zu verzichten.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 03, 2003 13:20 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Kann mich meinen Vorrednern nur anschliessen, und hab das auch bereits schon mehrere Male erwähnt : In Zeiten von DSL&Co spielen ein paar 100kb keine Rolle, zumal besonders bei 3D-Anwendungen die EXE-Größe kaum ne Rolle spielt.Dort sind es meist Texturen, Sounds und 3D-Daten die weitaus mehr Platz beanspruchen.Was machen schon ein paar 100KByte, wenn man sowieso mehrere MByte an Textur- und Modelldaten hat...
Und zur "Not" kann man seine EXE-Dateien immernoch mit nem EXE-Packer á la UPX verkleinern, was aber auch nicht viel mehr bringt als diese dann zu zippen.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 03, 2003 14:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also ich für meinen Teil empfinde es genau wie meine Vorredner. Es macht heutzutage keinen Unterschied mehr ob man eine Echse hat die 3 MB oder 3,2 MB groß ist. Mit ist es aber auch viel wichtiger, dass ich mit meinen Quellen arbeiten kann. Wenn ich auch Platzgründen nur Api programmieren würde dann wäre das total inefiziert weil ich 1. dadurch einen riesen Vorteil von Delphi wegwerfen würde und 2. mich größtenteils mit Dingen beschäftigen müsste die schon mal jemand vor mir gemacht hat. Und Api ist von den Quellen her auch nicht so schön anzusehen wie vcl.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 03, 2003 16:17 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Das ist ja auch meine Einstellung. Aber um jedem Skeptiger voll eine Ende zu setzen, wollt ich halt den Beweis erbringen. Und druch diese Dummy-Funktion dürfte der Unterschied deutlichst klar werden. Auserdem fand' ich's witzig Delphi zuzusehen, wie es durch die millionen von Code-Zeilen rast innerhalb weniger Sekunden ;)

BTW, Sysutils ab Delphi 7 sind gar nicht mehr so schlimm. Meine Anwendung mit SysUtils hat ca 40 KB (API-Fenster. Nur so 'ner Art Boot-Loader der nic anderes macht, als die eigentliche Datei (DLL) zu laden und zu "starten")! Ohne nicht arg viel weniger. Mir persönlich ist es sowieso egal, auch wenn die EXE mehrere MB hat. Wenn ich da an FF8 für den PC denke: 20MB EXE-File!!! Außerdem: kleinere Exe <> besseres Programm. Wenn man Delphi nach herzenslust optimieren lässt, wird die EXE sowieos etwas größer! Aber dafür in der Ausführung eben schneller.

Wie dem auch sein: ich hab' das gerede über Exe-Größe sowieso nie verstanden. Sorry: 5 MB Texturen und 300 KB EXE. Na und? Ich habe mich hat in letzter Zeit mit Delphi, Kylix und C/C++ beschäftigt und bin dann über diverse Artikel gestolpert, welche mich an diese Diskussionen wieder erinnert hat. Und wie gesagt: ich wollte dann einfach den Beweis erbringen! Daher dieser Post.

BTW, wusstet ihr, das ANSI-C Kompiler (und damit die meisten bis auf evtl. ein paar ausnahmen) laut aussage der Quellen von welchen ich die SmartLinker-Infos von Delphi herhab, selber keinen Smarlinker haben und deswegen u.U. 'ne menge toten Code in die EXE knallen? Soll angeblich der Grund sein, warum man in C möglichst viele kleine C-Dateien und somit kleine OBJ-Dateien hat. Denn sobald was aus einer OBJ-Datei etwas benötigt, wird vom Linker die komplette OBJ-Datei eingelinkt! Was mal wieder beweist, wie gut Delphi ist (was übrigens auch das Resüme meiner demletzt so just 4 fun durchgeführten Programmierungen unter C ist ;))

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.026s | 15 Queries | GZIP : On ]