Wie wird (X)IncludeFile in der Exe umgesetzt

Anfängerfragen zum Programmieren mit PureBasic.
Christian+
Beiträge: 213
Registriert: 13.07.2008 10:05
Computerausstattung: Windows 8.1 Pro
AMD Phenom II X4 955 @ 3.2 GHz
4GB RAM
NVIDIA GeForce GTX 660

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

Beitrag 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.
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

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

Beitrag 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)
Zuletzt geändert von Danilo am 13.02.2014 11:00, insgesamt 1-mal geändert.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Christian+
Beiträge: 213
Registriert: 13.07.2008 10:05
Computerausstattung: Windows 8.1 Pro
AMD Phenom II X4 955 @ 3.2 GHz
4GB RAM
NVIDIA GeForce GTX 660

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

Beitrag 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!
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

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

Beitrag 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. ;)
Zuletzt geändert von Danilo am 14.02.2014 07:35, insgesamt 1-mal geändert.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Sicro
Beiträge: 964
Registriert: 11.08.2005 19:08
Kontaktdaten:

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

Beitrag von Sicro »

Christian+ hat geschrieben:So funktioniert das Beispiel auf Windows und Linux:
[...]
Ok, so funktioniert es auch bei mir korrekt unter Linux.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Antworten