Linux-Compilat 3x grösser als windows ?

Für Fragen von Einsteigern und Programmieranfängern...
malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Linux-Compilat 3x grösser als windows ?

Beitrag von malabarista »

Ich habe das gleiche Projekt unter Linux 64-Bit kompiliert und unter Windows 32bit.
Das Ergebnis hat mich verblüfft: der exe-File war knapp 2 MB gross, das Linux-Kompilat dagegen 6MB.
Sind solche Unterschiede normal ?
(das Projekt ist ein Installationsprogramm: d.h. es lädt einen Download aus dem Internet und entpackt ihn )

In beiden Fällen waren alle Debug-Möglichkeiten ausgeschaltet.

Kann ich noch etwas mehr zum "Verkleinern" tun ?

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Linux-Compilat 3x grösser als windows ?

Beitrag von Timm Thaler »

Durchaus. Das ist noch harmlos.

Ein einfaches Terminalprogramm mit GUI:
Lazarus für Windows kompiliert: 1,84MByte
Lazarus für Linux kompiliert: 6,06MByte
Purebasic für Windows kompiliert: 56kByte, ja Kilo!

Purebasic optimiert hier gnadenlos auf die Windows-Api für die GUI, Lazarus baut für Linux GTK+ mit ein. Und wenn Du Qt als GUI wählst sieht es wieder anders aus.

Und dann musst Du noch schauen, ob Du den Debugger beim endgültigen Kompilieren rausnimmst.

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Linux-Compilat 3x grösser als windows ?

Beitrag von Warf »

FPC und speziell Lazarus programme sind recht groß. Das liegt daran das viele packages mehr code mitbringen als du tatsächlich verwendest. Durch smart linking kannst du das zwar reduzieren, allerdings sind die programme dennoch deutlich größer als z.B. das C äquivalent. Wenn du die LCL verwendest kommt vor allem das Widgetset hinzu, also der code um GKT (oder QT) unter Linux, Carbon/Cocoa unter Mac und WinAPI unter Windows zu verwenden. Die größe ist daher stark abhängig vom WS. Selbst ohne die LCL muss der FCL Code ja auch reingelinkt werden, welcher ja auch stark plattformabbhängig ist. Was mal interresant zu testen wäre (habe leider aktuell keine Linux VM mehr sonst würde ich es mal testen), wie es ausschauen würde mit dem CustomDrawn WS, oder mit ganz kleinen anwendungen wie Hello World, die nur die System unit verwenden.

Da stellt sich auch die Frage wie das bei anderen Sprachen aussieht. Wenn hier jemand MSE verwendet könnte man ja auch mal das testen, oder GCC-C (ich denke da C ja viel spezialisiertere includes hat, das die C executeables kleiner werden sollten, und der unterschied zwischen den Systemen auch nicht so groß sein sollte).

Generell ist der Overhead auch eher konstant, das heißt wenn du jetzt ein 20MB windows programm hast wird es unter Linux wahrscheinlich auch nicht größer als 30 MB sein, nur bei kleinen programmen fällt es nunmal auf. Und ein unterschied von 10 MB ist jetzt auch nicht die Welt. Java ist auch nicht kleiner, und C will ich einfach nicht verwenden falls nicht nötig

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Linux-Compilat 3x grösser als windows ?

Beitrag von Mathias »

Bei Konsolen-Anwendungen sieht es sogar noch schlechter aus.

Mit Debugger:
    Win32 62KB
    Win64 172KB
    Linux32 343KB
    Linux64 412KB

Ohne Debugger:
    MSDOS 16KB
    Win32 33KB
    Win64 44KB
    Linux32 155KB
    Linux64 182KB

    Turbo-Pascal 2,2KB :shock:


Für so ein kleines Programme ist der Speicherverbrauch recht hoch. :shock:

Code: Alles auswählen

program Project1;
begin
  WriteLn('Hello World');
end.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Linux-Compilat 3x grösser als windows ?

Beitrag von Warf »

Grade mal für GCC-C für linux x64 getestet:

Code: Alles auswählen

#include<stdio.h>
 
int main(int argc, char**argv) {
  printf("Hello World");
  return 0;
}


12 KB. Auch nicht sonderlich klein, aber um einiges kleiner als FPC.

Delphi 10.2 schafft für 32 Bit ohne debugger übrigens 45 KB ist damit in einer ähnlichen größenordnung wie FPC. Daher gehe ich davon aus das es wirklich an der größe der System unit liegt

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Linux-Compilat 3x grösser als windows ?

Beitrag von Mathias »

Grade mal für GCC-C für linux x64 getestet:

Bei mir ist es nur 8,6KB.

Daher gehe ich davon aus das es wirklich an der größe der System unit liegt

Werden dort nicht gebrauchte Units, nicht weg optimiert ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Linux-Compilat 3x grösser als windows ?

Beitrag von Warf »

Mathias hat geschrieben:Bei mir ist es nur 8,6KB.

grade geschaut, gcc unter windows selbes programm 40 KB

Mathias hat geschrieben:Werden dort nicht gebrauchte Units, nicht weg optimiert ?


Jain, es ist einfach deutlich aufgeteilter. Die System Unit von Pascal kann viele dinge, z.B. IO Funktionalität (WrtieLN/printf) ist in c in stdio, Memory management (GetMem/malloc) in stdlib, string funktionen (pos/strstr) in string. Die liste geht noch ein bisschen länger. Es werden also nur kleine subunits die tatsächlich verwendet werden zusammengelinkt, während man bei pascal direkt die komplette systemunit reingeworfen bekommt. Natürlich braucht jedes vernünftige C program jede der oben genannten includes, weshalb das für ein beispiel was nicht grade Hello world ist wahrscheinlich etwas anders aussehen sollte

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Linux-Compilat 3x grösser als windows ?

Beitrag von theo »

malabarista hat geschrieben:Kann ich noch etwas mehr zum "Verkleinern" tun ?


Die Frage ist einfach immer: Warum?
Jedes gut aufgelöste Foto ist heute so groß.
Mit smart linking kriegt man die Grösse noch runter und zum Versenden kann man es zippen, aber es ist doch eigentlich völlig egal.

relocate
Beiträge: 61
Registriert: Di 24. Jan 2012, 11:47
OS, Lazarus, FPC: Win (L- FPC 2.4.4 + 2.6.4)
CPU-Target: 32Bit

Re: Linux-Compilat 3x grösser als windows ?

Beitrag von relocate »

theo hat geschrieben:
malabarista hat geschrieben:Kann ich noch etwas mehr zum "Verkleinern" tun ?


Die Frage ist einfach immer: Warum?


Das ist ma 'ne Frage. Weil es nicht nötig erscheint, weil auch in heutigen Zeiten Platz endlich ist (vor allem beim Download über die ach so tollen LTE Tarife).
Weil es mal gut wäre, wenn man wieder mehr optimieren würde.

theo hat geschrieben:Jedes gut aufgelöste Foto ist heute so groß.


Das ist die enthaltene Information aber auch relevant.

theo hat geschrieben:Mit smart linking kriegt man die Grösse noch runter und zum Versenden kann man es zippen, aber es ist doch eigentlich völlig egal.


Scheiß drauf, Resourcenverschwendung ist en vogue... :roll:
Bei einem Programm ist das eventuell egal, aber jetzt das ganze mal 10, da überlege ich mir aber 3mal ob ich das Programm nutze...
Würde ich die Dinge so wie alle anderen machen, hätte ich so manche Probleme nicht.

Aber das wäre langweilig.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Linux-Compilat 3x grösser als windows ?

Beitrag von theo »

relocate hat geschrieben:Bei einem Programm ist das eventuell egal, aber jetzt das ganze mal 10, da überlege ich mir aber 3mal ob ich das Programm nutze...


Wirklich? Dann darfst du aber kein einziges Youtube Video mehr schauen etc.
Übertreib mal nicht.

relocate
Beiträge: 61
Registriert: Di 24. Jan 2012, 11:47
OS, Lazarus, FPC: Win (L- FPC 2.4.4 + 2.6.4)
CPU-Target: 32Bit

Re: Linux-Compilat 3x grösser als windows ?

Beitrag von relocate »

theo hat geschrieben:
relocate hat geschrieben:Bei einem Programm ist das eventuell egal, aber jetzt das ganze mal 10, da überlege ich mir aber 3mal ob ich das Programm nutze...


Wirklich? Dann darfst du aber kein einziges Youtube Video mehr schauen etc.
Übertreib mal nicht.


1. Die Daten sind flüchtig.
2. Die Daten sind ebenfalls relevant (vermutlich, na ja, nicht immer).
3. Aber die Daten sind flüchtig.
4. Wo ist der Unterschied?

Wenn das Programm unter Linux einfach so mal 3 mal so groß ist, wie unter Windows (wobei ich das auch für unnötig halte),
dann gibt es da einfach Optimierungspotential und zu Fragen Warum ist einfach kontraproduktiv und ebenfalls überflüssig.
Vor allem, wenn dann diese Linuxprogramm ggf. (WARUM auch immer) auf einem Raspi oder Co. eingesetzt werden sollen ist gerade Größe auf jeden Fall relevant.

Was spräche dagegen, mal an die Optimierung von FPC/LAZ zu gehen und zu zeigen, es geht besser.
Würde ich die Dinge so wie alle anderen machen, hätte ich so manche Probleme nicht.

Aber das wäre langweilig.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Linux-Compilat 3x grösser als windows ?

Beitrag von m.fuchs »

relocate hat geschrieben:Was spräche dagegen, mal an die Optimierung von FPC/LAZ zu gehen und zu zeigen, es geht besser.

Überhaupt nichts, ich bin mir sicher dass sich alle über dein Angebot freuen werden.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

relocate
Beiträge: 61
Registriert: Di 24. Jan 2012, 11:47
OS, Lazarus, FPC: Win (L- FPC 2.4.4 + 2.6.4)
CPU-Target: 32Bit

Re: Linux-Compilat 3x grösser als windows ?

Beitrag von relocate »

m.fuchs hat geschrieben:
relocate hat geschrieben:Was spräche dagegen, mal an die Optimierung von FPC/LAZ zu gehen und zu zeigen, es geht besser.

Überhaupt nichts, ich bin mir sicher dass sich alle über dein Angebot freuen werden.


relocate hat geschrieben:Was spräche dagegen, mal an die Optimierung von FPC/LAZ zu gehen und zu zeigen, es geht besser.

Konjunktiv!
Sowohl meine Fähigkeiten, als auch meine Zeit sind definitiv ausgereizt, in jeder Hinsicht.
Für mich, für meine Projekte aber mache ich das, ich optimiere wo es nur geht. Das fängt damit an, dass ich Lazarus nicht nutze... :D
Würde ich die Dinge so wie alle anderen machen, hätte ich so manche Probleme nicht.

Aber das wäre langweilig.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Linux-Compilat 3x grösser als windows ?

Beitrag von theo »

relocate hat geschrieben:4. Wo ist der Unterschied?

Ich weiß wirklich nicht,worauf du hinaus willst.
Wahrend beim schauen eines Online Videos mehrere Computer beteiligt sind und Strom fressen, interessiert die Dateigröße des Executable in dieser Grössenordnung auf deiner Festplatte eigentlich ökologisch nicht weiter.
Aber lass gut sein. Mich interessiert dein extreme Meinung eigentlich gar nicht mehr.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Linux-Compilat 3x grösser als windows ?

Beitrag von Timm Thaler »

relocate hat geschrieben:Vor allem, wenn dann diese Linuxprogramm ggf. (WARUM auch immer) auf einem Raspi oder Co. eingesetzt werden sollen ist gerade Größe auf jeden Fall relevant.


Ich bin ja auch für Ressourcenschonung, und beim AVR Controller kämpfe ich auch um jedes Byte - naja, nicht jedes...

Aber wenn ich sehe was auf dem Raspi sonst so rumgammelt, da mache ich mit um ein paar mehr MByte mehr für mein Programm keine Sorgen. Was mich viel mehr stört ist schwer vorhersagbares Langzeitverhalten. So habe ich immer noch das Problem, dass GUI-Programme gerade unter Linux über mehrere Tage Speicher akkumulieren bis zur Unbenutzbarkeit. Und da bekommt man ganz schwer raus, woran das liegt.

Antworten