Seite 2 von 2

Re: Wie wird (X)IncludeFile in der Exe umgesetzt

Verfasst: 13.02.2014 10:43
von Christian+
Ich habe jetzt auch mal mein Linux gestartet und es dort getestet. Mit Linux Mint x64 ist die Exe immer gleich groß kein Plan wieso. Scheinbar Funktioniert es unter Windows aber nicht unter Linux mal schauen was die Mac User sagen wie es dort ist.

Re: Wie wird (X)IncludeFile in der Exe umgesetzt

Verfasst: 13.02.2014 10:45
von Danilo
hoerbie hat geschrieben:kann das noch jemand auf dem Mac mal ausprobieren?
Ist das Gleiche wie bei Linux. Dachte es liegt vielleicht an dem String, also das der String
in der executable ist, aber die Prozedur nicht eingefügt wird.

Habe dazu folgendes Beispiel gemacht um das String-Problem auszuschliessen:

Code: Alles auswählen

Macro t
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
        Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5)) : Test(a + b * c / d + Pow(x,5))
EndMacro

Procedure Test(y = 0)
    If x = 12
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
    EndIf
EndProcedure

;Test() ; beim zweitem Kompilieren auskommentieren

MessageRequester("EXE SIZE",Str( FileSize(ProgramFilename()) ))
Ohne Debugger auf Mac OS X 10.9.1 (Mavericks) und Windows 7, jeweils x86 und x64:

Code: Alles auswählen

; PB 5.21 LTS x86 Mac OS X:
; Mit  Test2():  1.976.876
; Ohne Test2():  1.976.876
;
; PB 5.21 LTS x64 Mac OS X:
; Mit  Test2():  2.608.864
; Ohne Test2():  2.608.864
;
; PB 5.21 LTS x86 Windows:
; Mit  Test2(): 1.640.960
; Ohne Test2(): 1.640.960
; Ohne Test2():     7.680 (mit meinem Optimierer)
;
; PB 5.21 LTS x64 Windows:
; Mit  Test2():  2.557.440
; Ohne Test2():  2.557.440
; Ohne Test2():      8.192 (mit meinem Optimierer)
(Die Tausender-Punkte habe ich zur besseren Lesbarkeit von Hand eingefügt)

Re: Wie wird (X)IncludeFile in der Exe umgesetzt

Verfasst: 13.02.2014 10:56
von Christian+
Dein Test ist nicht besonders gut gewählt. Die Procedure Test ruft sich selber auf da steigt die Optimierung in Pure Basic sowieso bereits aus so intelligent das zu erkennen ist sie nicht.
Deswegen sollte man falls man wert auf kleine Exe Dateien legt auch unter Windows sich ehr selbst darum kümmern als es PB zu überlassen zum Glück ist die Größe heute meist nicht so relevant.

So funktioniert das Beispiel auf Windows und Linux:

Code: Alles auswählen

Macro t
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
        Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5)) : Sqr(a + b * c / d + Pow(x,5))
EndMacro

Procedure Test(y = 0)
    If x = 12
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
        t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t : t
    EndIf
EndProcedure

;Test() ; beim zweitem Kompilieren auskommentieren

MessageRequester("EXE SIZE",Str( FileSize(ProgramFilename()) ))
Edit:
@Danilo Deine Idee mit dem String ersetzen war gut scheinbar geht es so auch unter Linux!

Re: Wie wird (X)IncludeFile in der Exe umgesetzt

Verfasst: 13.02.2014 11:11
von Danilo
Christian+ hat geschrieben:Dein Test ist nicht besonders gut gewählt. Die Procedure Test ruft sich selber auf da steigt die Optimierung in Pure Basic sowieso bereits aus so intelligent das zu erkennen ist sie nicht.
Genau darum geht es ja. Bei Optimierungen ist PB einfach nicht sehr intelligent, und allein mit einem kleinen
externen Tool kann man die EXE-Size auf Windows von 2,5 MB auf 8k trimmen.
Habe mein Tool auch bei einem Real-World Project im Einsatz, und 20% - 25% der EXE-Größe
kann da im Schnitt gespart werden, indem man einfach unbenutzte Funktionen entfernt.
Mit mehr integrierten Optimierungen könnte man vielleicht noch mehr sparen und optimieren.
Ich finde das ziemlich schlecht vom Compilerbau her. Aber andere BASIC beginnen mit der
kleinsten EXE als knapp 1MB, von daher kann man sich bei PB kaum beschweren. ;)

Re: Wie wird (X)IncludeFile in der Exe umgesetzt

Verfasst: 13.02.2014 14:49
von Sicro
Christian+ hat geschrieben:So funktioniert das Beispiel auf Windows und Linux:
[...]
Ok, so funktioniert es auch bei mir korrekt unter Linux.