Difference between revisions of "File size and smartlinking/de"

From Free Pascal wiki
Jump to navigationJump to search
 
(10 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
{{File size and smartlinking}}
 
{{File size and smartlinking}}
 
+
<br>
Dieser Artikel befindet sich in Aufbau wie in Übersetzung. Helfen Sie mit, ihn weiter zu verbessern!
+
Dieser Artikel befindet sich in Aufbau wie in Übersetzung. Helfen Sie mit, ihn weiter zu verbessern!<br>
 
+
<br>
 
__TOC__
 
__TOC__
 
+
<br>
 +
Dieser Artikel handelt davon, wie Sie die Grösse Ihrer ausführbaren Datei(en) verringern können.<br>
 
== Einleitung ==
 
== Einleitung ==
 
In Free Pascal entfernt die Compilereinstellung "Smart-Linkbar" bzw. "-CX" aus der ausführbaren Datei den nicht verwendeten Code und die nicht verwendeten Variablen.<br />
 
In Free Pascal entfernt die Compilereinstellung "Smart-Linkbar" bzw. "-CX" aus der ausführbaren Datei den nicht verwendeten Code und die nicht verwendeten Variablen.<br />
 
<br />
 
<br />
== Case study 1 in Windows ==
+
== Fallstudie 1 in Windows ==
 
Diese Studie wurde am 8. Februar 2006 durchgeführt. Da zu diesem Zeitpunkt Lazarus (Version 0.9.12) mit der Möglichkeit zum "smartlinking" kompiliert und freigegeben wurde. Diese Studie beschreibt die Beziehungen zwischen den unterschiedlichen Ergebnissen und den unterschiedlichen Lazarus und Free Pascal-Versionen mit und ohne der Verwedung von smartllinking.<br>
 
Diese Studie wurde am 8. Februar 2006 durchgeführt. Da zu diesem Zeitpunkt Lazarus (Version 0.9.12) mit der Möglichkeit zum "smartlinking" kompiliert und freigegeben wurde. Diese Studie beschreibt die Beziehungen zwischen den unterschiedlichen Ergebnissen und den unterschiedlichen Lazarus und Free Pascal-Versionen mit und ohne der Verwedung von smartllinking.<br>
 
<br>
 
<br>
Line 16: Line 17:
 
* Die Zeit, die für das Linken gebraucht wird
 
* Die Zeit, die für das Linken gebraucht wird
 
<br>
 
<br>
 
+
Die Zeit, die zum Compilieren gebraucht wird, wird hier nicht berücksichtigt, da diese Zeit bei allen Konfigurationen zu ähnlich ist. Die Zeit, die zum Compilieren gebraucht wird, ist weniger bedeutend als die Zeit, die zum Linken gebraucht wird.<br>
Compile time isn´t considered here because it´s too similar on all configurations and much less significant than the link time.
+
<br>
 
+
Die Grösse der ausführbaren Datei (in unserem Beispiel ist dies die Datei magnifier.exe) kann mit dem Befehl strip verringert werden. Beachten Sie, dass der Befehl strip immer von der Kommandozeile ausgeführt wird:
 
+
<syntaxhighlight lang="bash">
Executable size without strip isn´t included. Notice that strip was used always from command line with the command:
 
 
 
<pre>
 
 
strip --strip-all magnifier.exe
 
strip --strip-all magnifier.exe
</pre>
+
</syntaxhighlight>
 
+
<br>
 
+
Das Programm magnifier.exe ist eine virtuelle Lupe für den Desktop. Der Quellcode und die Binaries für dieses Programm sind frei verfügbar und können von folgender Seite heruntergeladen werden:<br>
The program being compiled is the Virtual Magnifying Glass. The source and binaries for this program are freely available for download on: http://magnifier.sourceforge.net
+
http://magnifier.sourceforge.net<br>
 
+
<br>
 
+
Die Zeiten zum Linken wurde auf einem Computer mit 3,2 GHz Pentium 4 dual Core Prozessor und einem Intel Motherboard mit 512 MB Arbeitsspeicher (RAM) ermittelt.<br>
About the linking time please note that the utilized computer is 3.2GHz Pentium 4 with Intel motherboard and dual core processor and 512MB of RAM.
+
<br>
 
+
<b>Leistungsbeurteilung</b><br />
 
+
<br />
'''Results'''
+
Das verwendete Betriebssystem ist Windows XP und die verwendeten Lazarus Versionen sind ist 0.9.13 und 0.9.12. Der Vergleich erfolgte mit den folgenden Software-Konfigurationen:
 
+
* Lazarus 0.9.12 und Free Pascal 2.0.2 in einem Installationspaket. LCL und RTL sind smartlinked. Von nun an 0.9.12 genannt.
 
+
* Lazarus 0.9.13 als Subversion ab demselben Zeitpunkt heruntergeladen. Free Pascal 2.0.2 wurde separat installiert. Die LCL ist nicht smartlinked. Von nun an 0.9.13 + 2.0.2 genannt.
The utilized OS is Windows XP and the 0.9.13 versions are from the same date when 0.9.12 was release. The comparison took place using the following software configurations:
+
* Lazarus 0.9.13 Snapshot und Free Pascal 2.1, in einem Installationspaket. Die LCL ist nicht smartlinked. Von nun an 0.9.13 + 2.1 genannt.
 
+
* Lazarus 0.9.13 Snapshot und Free Pascal 2.1, in einem Installationspaket. Die LCL ist smartlinked. Von nun an 0.9.13 + 2,1 + SL genannt.
* Lazarus 0.9.12 available [http://sourceforge.net/project/showfiles.php?group_id=89339 here]. Free Pascal 2.0.2 that comes with the installer. LCL and RTL are smartlinked. Refered from now on as simply 0.9.12.
 
 
 
* Lazarus 0.9.13 downloaded from Subversion from the same date. Free Pascal 2.0.2 installed separately. The LCL is not smartlinked. Refered from now on as simply 0.9.13 + 2.0.2.
 
 
 
* Lazarus 0.9.13 snapshot. Free Pascal 2.1 that comes with the installer. The LCL is not smartlinked. Refered from now on as simply 0.9.13 + 2.1.
 
 
 
* Lazarus 0.9.13 snapshot. Free Pascal 2.1 that comes with the installer. The LCL is smartlinked. Refered from now on as simply 0.9.13 + 2.1 + SL.
 
  
 
{| class="wikitable"
 
{| class="wikitable"
 
! !! 0.9.12 !! 0.9.13 + 2.0.2 !! 0.9.13 + 2.1 + SL !!  0.9.13 + 2.1
 
! !! 0.9.12 !! 0.9.13 + 2.0.2 !! 0.9.13 + 2.1 + SL !!  0.9.13 + 2.1
 
|-
 
|-
! File Size after strip (in bytes)
+
! Dateigrösse nach strip (in bytes)
 
| align="center" | 1,108,480
 
| align="center" | 1,108,480
 
| align="center" | 1,587,712
 
| align="center" | 1,587,712
Line 56: Line 47:
  
 
|-
 
|-
! File Size after UPX (in bytes)
+
! Dateigrösse nach UPX (in bytes)
 
| align="center" | 318,976
 
| align="center" | 318,976
 
| align="center" | 438,272
 
| align="center" | 438,272
Line 64: Line 55:
 
|-
 
|-
  
! Linking time
+
! Zeit zum Linken
| align="center" | 15 seconds
+
| align="center" | 15 Sekunden
| align="center" | 5 seconds
+
| align="center" | 5 Sekunden
| align="center" | 45 seconds
+
| align="center" | 45 Sekunden
| align="center" | 10 seconds
+
| align="center" | 10 Sekunden
  
 
|}
 
|}
Line 74: Line 65:
 
[[Image:OuptutFileSizesComparisonChart.png]]
 
[[Image:OuptutFileSizesComparisonChart.png]]
  
'''Conclusion'''
+
<b>Abschluss</b><br />
 +
<br />
 +
Der 0.9.13 Snapshot vom 8. Februar 2006 verfügt über einen instabilen Compiler aus dem 2.1 Zweig, der im Vergleich zu den anderen Versionen die größeren Executables und langsamer Link-Zeit führen kann.<br />
 +
Die 0.9.12-Version hat die beste Dateigröße von allen, mit UPX und ohne UPX. Das zeigt, dass smartlinking die Dateigröße verringern kann. Der Preis dafür ist eine deutlich höhere Zeit beim Linken.<br />
 +
Die 0.9.12-Version ist komplett für smartlinking unter Windows konfiguriert und es ist keine zusätzliche Konfiguration erforderlich. Dies war bei früheren Versionen nicht der Fall.<br />
 +
<br />
  
 
+
==Entfernen von ungenutzten Funktionen einer Klasse==
The 0.9.13 snapshot from the 8th of February 2006 features a unstable compiler from the 2.1 branch, which can cause the bigger executables and slower linking time as compared to the other versions.
+
Frage: Wenn eine virtuelle Methode einer Klasse im Programm nicht verwendet wird, wird diese dann vom Compiler entfernt?<br />
 
+
Antwort: Wenn sie FPC 2.3.1 oder höher verwenden und alle Programmoptimierungen des Compilers verwenden und der Code nicht erreichbar ist, dann ist die Antwort ja.<br />
 
+
<br />
The 0.9.12 version has the best file size of all, both with UPX and without, showing that Smartlinking really can diminish the file size in Windows. This, however, does not come without a cost, and the cost is linking time, which is about 3 times higher then without smartlinking.
+
Frage: Wie kann der Compiler erkennen, ob eine virtuelle Methode verwendet wird?<br />
 
+
Antwort: Wenn Sie z. B. eine Klassenhierarchie TBase-> TDerived1-> TDerived2 mit einer virtuellen Methode namens "vmethod" haben und von der es nirgends im Programm einen Aufruf gibt, dann wird diese virtuelle Methode nicht genutzt und wird entfernt.<br />
 
+
<br />
The 0.9.12 version already comes fully configured for Smartlinking on Windows and no extra configuration is needed. This was not the case on previous releases.
 
  
 
== Siehe auch ==
 
== Siehe auch ==
 +
[[Size_Matters/de|Size Matters]]
  
* [http://members.chello.sk/ales/guide.html Guide] for anyone inexperienced in getting FPC and Lazarus to work properly.
 
 
<br />
 
<br />
 
<br />
 
<br />
  
 
{{AutoCategory}}
 
{{AutoCategory}}

Latest revision as of 21:52, 22 November 2014

Deutsch (de) English (en) français (fr) 日本語 (ja) português (pt) 中文(中国大陆)‎ (zh_CN)

Dieser Artikel befindet sich in Aufbau wie in Übersetzung. Helfen Sie mit, ihn weiter zu verbessern!


Dieser Artikel handelt davon, wie Sie die Grösse Ihrer ausführbaren Datei(en) verringern können.

Einleitung

In Free Pascal entfernt die Compilereinstellung "Smart-Linkbar" bzw. "-CX" aus der ausführbaren Datei den nicht verwendeten Code und die nicht verwendeten Variablen.

Fallstudie 1 in Windows

Diese Studie wurde am 8. Februar 2006 durchgeführt. Da zu diesem Zeitpunkt Lazarus (Version 0.9.12) mit der Möglichkeit zum "smartlinking" kompiliert und freigegeben wurde. Diese Studie beschreibt die Beziehungen zwischen den unterschiedlichen Ergebnissen und den unterschiedlichen Lazarus und Free Pascal-Versionen mit und ohne der Verwedung von smartllinking.

Die untersuchten Bedingungen:

  • Die Grösse der ausführbaren Datei nach der Verwendung von strip
  • Die Grösse der ausführbaren Datei nach der Verwendung von strip nach und der Verwendung von UPX
  • Die Zeit, die für das Linken gebraucht wird


Die Zeit, die zum Compilieren gebraucht wird, wird hier nicht berücksichtigt, da diese Zeit bei allen Konfigurationen zu ähnlich ist. Die Zeit, die zum Compilieren gebraucht wird, ist weniger bedeutend als die Zeit, die zum Linken gebraucht wird.

Die Grösse der ausführbaren Datei (in unserem Beispiel ist dies die Datei magnifier.exe) kann mit dem Befehl strip verringert werden. Beachten Sie, dass der Befehl strip immer von der Kommandozeile ausgeführt wird:

strip --strip-all magnifier.exe


Das Programm magnifier.exe ist eine virtuelle Lupe für den Desktop. Der Quellcode und die Binaries für dieses Programm sind frei verfügbar und können von folgender Seite heruntergeladen werden:
http://magnifier.sourceforge.net

Die Zeiten zum Linken wurde auf einem Computer mit 3,2 GHz Pentium 4 dual Core Prozessor und einem Intel Motherboard mit 512 MB Arbeitsspeicher (RAM) ermittelt.

Leistungsbeurteilung

Das verwendete Betriebssystem ist Windows XP und die verwendeten Lazarus Versionen sind ist 0.9.13 und 0.9.12. Der Vergleich erfolgte mit den folgenden Software-Konfigurationen:

  • Lazarus 0.9.12 und Free Pascal 2.0.2 in einem Installationspaket. LCL und RTL sind smartlinked. Von nun an 0.9.12 genannt.
  • Lazarus 0.9.13 als Subversion ab demselben Zeitpunkt heruntergeladen. Free Pascal 2.0.2 wurde separat installiert. Die LCL ist nicht smartlinked. Von nun an 0.9.13 + 2.0.2 genannt.
  • Lazarus 0.9.13 Snapshot und Free Pascal 2.1, in einem Installationspaket. Die LCL ist nicht smartlinked. Von nun an 0.9.13 + 2.1 genannt.
  • Lazarus 0.9.13 Snapshot und Free Pascal 2.1, in einem Installationspaket. Die LCL ist smartlinked. Von nun an 0.9.13 + 2,1 + SL genannt.
0.9.12 0.9.13 + 2.0.2 0.9.13 + 2.1 + SL 0.9.13 + 2.1
Dateigrösse nach strip (in bytes) 1,108,480 1,587,712 1,425,408 1,649,152
Dateigrösse nach UPX (in bytes) 318,976 438,272 388,608 454,144
Zeit zum Linken 15 Sekunden 5 Sekunden 45 Sekunden 10 Sekunden

OuptutFileSizesComparisonChart.png

Abschluss

Der 0.9.13 Snapshot vom 8. Februar 2006 verfügt über einen instabilen Compiler aus dem 2.1 Zweig, der im Vergleich zu den anderen Versionen die größeren Executables und langsamer Link-Zeit führen kann.
Die 0.9.12-Version hat die beste Dateigröße von allen, mit UPX und ohne UPX. Das zeigt, dass smartlinking die Dateigröße verringern kann. Der Preis dafür ist eine deutlich höhere Zeit beim Linken.
Die 0.9.12-Version ist komplett für smartlinking unter Windows konfiguriert und es ist keine zusätzliche Konfiguration erforderlich. Dies war bei früheren Versionen nicht der Fall.

Entfernen von ungenutzten Funktionen einer Klasse

Frage: Wenn eine virtuelle Methode einer Klasse im Programm nicht verwendet wird, wird diese dann vom Compiler entfernt?
Antwort: Wenn sie FPC 2.3.1 oder höher verwenden und alle Programmoptimierungen des Compilers verwenden und der Code nicht erreichbar ist, dann ist die Antwort ja.

Frage: Wie kann der Compiler erkennen, ob eine virtuelle Methode verwendet wird?
Antwort: Wenn Sie z. B. eine Klassenhierarchie TBase-> TDerived1-> TDerived2 mit einer virtuellen Methode namens "vmethod" haben und von der es nirgends im Programm einen Aufruf gibt, dann wird diese virtuelle Methode nicht genutzt und wird entfernt.

Siehe auch

Size Matters