AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Minimale Exe-Datei- bzw. Compilatsgröße VCL-freier Delphiprogramme
Thema durchsuchen
Ansicht
Themen-Optionen

Minimale Exe-Datei- bzw. Compilatsgröße VCL-freier Delphiprogramme

Ein Thema von Delphi-Laie · begonnen am 8. Mai 2012 · letzter Beitrag vom 10. Mai 2012
Antwort Antwort
Seite 2 von 2     12   
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#11

AW: Minimale Exe-Datei- bzw. Compilatsgröße VCL-freier Delphiprogramme

  Alt 9. Mai 2012, 13:53
Allmählich lichtet sich das Dunkel...

an himitsu: RTTI dürfte für Delphi-4-Compilate noch nicht relevant sein (bitte korrigieren, falls das nicht stimmt). Bei XE2 konnte ich damit die Compilatsgrößen hingegen um ca. 30% verringern.

an jaenicke: upx kenne ich zwar, kam aber gar nicht auf die Idee bzw. dachte nicht daran, daß es hier verwandt worden sein könnte. Ist m.E. auch ein zweifelhafter Taschenspielertrick, der mit größerer Speicherbedarf einhergeht, besser: erkauft wird. Und tatsächlich: Das beigelegte kleinere Original benötigt mehr davon als mein erhaltenes Compilat. Daß man 7Zip zur diesbezüglichen Spurensuche einsetzen kann, wußte ich hingegen noch nicht. Ich bekam das Objekt meiner Untersuchung und meines Interesse mit meinem 7Zip der Version 9.2 zunächst nur über den Menüpunkt "Entpacken" in ein Unterverzeichnis halbwegs seziert. Nach einigem Suchen gelang es mir schließlich über "intern öffnen", auch zu dieser vollständigeren Ansicht zu gelangen.

an shimia: StripReloc nahm ich zwar schon mal als Wort war, nicht aber, was das ist und wozu man das einsetzen kann. Mein Interesse dafür ist nunmehr geweckt.

Danke an allen, die sich bisher beteiligten!

Gruß

Delphi-Laie

Ergänzung: Mit decompress des upx-Programmes komme ich fast auf meine Compilatsgröße (das Original ist nur noch ein Quentchen kleiner).

Ergänzung 2: Mit StripReloc kam ich auf 70 kByte gegenüber 73 kByte des expandierten Originals -> kleiner Glückshormonausstoß!

Geändert von Delphi-Laie ( 9. Mai 2012 um 16:56 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#12

AW: Minimale Exe-Datei- bzw. Compilatsgröße VCL-freier Delphiprogramme

  Alt 9. Mai 2012, 14:14
Reicht immer noch nicht für eine Nominierung in der einzig wahren Disziplin
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#13

AW: Minimale Exe-Datei- bzw. Compilatsgröße VCL-freier Delphiprogramme

  Alt 9. Mai 2012, 14:17
Windowsprogramme bekommen beim Compilieren im PE-Header mitgeteilt, wo sie im RAM liegen möchten.

Falls das nicht möglich ist, müssen sie verschoben werden, dabei ändern sich natürlich auch Speicheradressen, für Sprungziele, Konstanten usw., welche nun wo anders liegen.
Dafür gibt es diese Tabelle, denn darüber kann Windos nun diese Speicheradressen "korrigieren"/anpassen.

StripReloc entfernt diese Tabelle einfach, womit es beim Verschieben zu Fehler kommt, da diese Adressen nicht mehr angepaßt werden können, weil winodws sie ja nicht kennt.

Das ist vorallem für DLLs wichtig, da irgendwie niemand sich die Mühe macht dort sich ein hübsches Fleckchen auszusuchen und demnach alle Delphi-DLLs an der selben Stelle liegen würden. (bei C++ und Co. natürlich genauso, jemachdem was dort als Standardwert vorhanden ist)

Die EXE wird "meistens" als Erstes geladen, womit ihr Platz "meistens" frei ist.
Ausnahme ist EXEPacker, Encrypter, Antihackerschutz und Dergleichen, wo ein Miniprogrammcode noch vor der EXE gestartet wird und dieses dann die eigentliche EXE läd.



Auch kann man viele Resourcen entfernen, da sie meistens nicht verwendet werden.
So bringt Delphi sein eigenes kleines Cursor-Set (Mauszeiger).
Kann man sich gerne mal über einem Resource-Hacker/Editor ansehn.



Und ja, neuere RTTI-Informationen sind natürlich auch erst in den entsprechenden neueren Delphi-Versionen dazugekommen.



Ansonsten geh ich davon auß, daß man heutzutage genug Speicher hat.
Ich versuche zwar hier und da was einzusparen (über den Programmcode und meine eigenen Resourcen), aber übertreiben muß man es nun auch nicht unbedingt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 9. Mai 2012 um 14:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#14

AW: Minimale Exe-Datei- bzw. Compilatsgröße VCL-freier Delphiprogramme

  Alt 10. Mai 2012, 10:31
1 kb Delphi-exe
aber statt den dort verwendeten system.pas und sysinit.pas verwendest du besser meine

falls du noch dabei produktiv programmieren willst, solltest du die KOL-Units nutzen (wird aber wieder bissl größer)

  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

AW: Minimale Exe-Datei- bzw. Compilatsgröße VCL-freier Delphiprogramme

  Alt 10. Mai 2012, 13:08
Um es noch mal etwas auszuführen, was himitsu schon gesagt hat. Module (Exe-Dateien, DLLs) werden unter Windows an die sogenannte Imagebaseaddress geladen. auf diese Adresse beziehen sich alle Adressen im Kompilat. Diese Imagebaseaddress wird beim Kompilieren festgelegt. Kann ein Modul nicht an die Imagebaseaddress geladen, weil sich dort schon ein Modul befindet, wird sie an eine andere Adresse geladen. Jetzt stimmen natürlich die Adressen im Programmcode nicht mehr und Windows muss sie neu berechnen. Dazu benötigt Windows den Reallocationtable. Da eine Exe in der Regel als erstes geladen wird, kann man ihn aus der Exe entfernen. Bei DLLs sollte man dies tunlichst nicht tun, da man nicht weiß, ob die Imagebaseaddress schon belegt ist oder nicht. Desweiteren ist der Reallocationtable nicht sehr groß, so dass es das Modul nicht signifikant verkleinert.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 11: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