Aktuelle Zeit: 25.04.2017 08:33

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Warum ist das 2 .Programm als EXE fast 19mal so groß.
BeitragVerfasst: 20.04.2017 09:12 
Offline

Registriert: 31.12.2009 11:58
Warum ist das 2 .Programm als EXE fast 19mal so groß.
Purebasic 5.6

Danke.
Gruss

77000 Byte groß als EXE :
Code:
Global buffer.l,pitch.l,PixelFormat.l,zaehler.l

Enumeration
  #Window_0
  #canv
EndEnumeration

OpenWindow(#window_0, 10,10, 500,500, "Canvas")
CanvasGadget(#canv, 10, 10, 400, 400)

StartDrawing(CanvasOutput(#canv))
  buffer = DrawingBuffer()

  !MOV ebx,dword [v_buffer]

  !MOV ecx,160000
  !nextbyte:
  !MOV dword [ebx],$00ff00
  !add ebx,3
  !dec ecx
  !TEST ecx, ecx
  !JNZ  nextbyte
StopDrawing()
 
 Repeat
  Event = WaitWindowEvent()   
 
  Select Event
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
     
      EventType = EventType
        Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
ForEver



1500000 Byte groß als EXE :
Code:
Global buffer.l,pitch.l,PixelFormat.l,zaehler.l

Enumeration
  #Window_0
  #canv
EndEnumeration

OpenWindow(#window_0, 10,10, 500,500, "Canvas")
CanvasGadget(#canv, 10, 10, 400, 400)

StartDrawing(CanvasOutput(#canv))
  buffer = DrawingBuffer()

  !MOV ebx,dword [v_buffer]

  !Repeat 160000
    !MOV dword [ebx],$ff0000
    !add ebx,3
  !End Repeat
StopDrawing()
 
 Repeat
  Event = WaitWindowEvent()   
 
  Select Event
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
     
      EventType = EventType
        Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
ForEver


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Warum ist das 2 .Programm als EXE fast 19mal so groß.
BeitragVerfasst: 20.04.2017 10:22 
Offline
Benutzeravatar

Registriert: 08.03.2013 14:27
Wohnort: Bad Berleburg
Ich würde mal folgendes vermuten: https://flatassembler.net/docs.php?article=ufasm

Zitat von der verlinkten Seite:
Zitat:
Code:
repeat 5
   add   eax,eax
end repeat

This time the directive of the assembler is used to repeat the instruction five times. But no jumping is done here. What assembler generates when meets the above construct, is actually the same what would be generated when we wrote it this way:
Code:
        add     eax,eax
   add   eax,eax
   add   eax,eax
   add   eax,eax
   add   eax,eax

Assembler generates the five copies of the same machine instruction.

PureBasic nutzt FASM und ich denke in der Executable steht bei dir in Maschinencode jetzt 160.000 mal direkt hintereinander:
Code:
!MOV dword [ebx],$ff0000
!add ebx,3

Das summiert sich natürlich ;)

_________________
PBExpress
Lightweight PureBasic FastCGI Framework

Github: https://github.com/reVerBxTc/PBExpress
Wiki: https://github.com/reVerBxTc/PBExpress/wiki


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Warum ist das 2 .Programm als EXE fast 19mal so groß.
BeitragVerfasst: 20.04.2017 22:16 
Offline

Registriert: 31.12.2009 11:58
Na....da wird ja dann ein Mist hergestellt.

Gruss


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Warum ist das 2 .Programm als EXE fast 19mal so groß.
BeitragVerfasst: 20.04.2017 22:55 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Nun ja, es gibt nun mal immer das Zusammenspiel zwischen Ausführungszeit und Speicherverbrauch.
Durch das direkte wiederholen des Befehls gewinnst du halt die Zeit die sonst beim vermindern des Schleifenregisters benötigt wird, dafür wird jedoch mehr Speicher benötig, um den nun immer wiederkehrenden Befehl zu speichern.
Vor allem der Sprungbefehl ist (im vergleich zu einfachen Operationen) recht langsam.
Solche Optimierungen machen jedoch nur dann sinn, wenn sich die Schleife unveränderlich ist.
In deinem Fall wären dann die Exe immer nur für eine Bildgröße nützlich.

Die Frage die sich hier stellt ist, wie schnell ist denn der längere Code?

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Warum ist das 2 .Programm als EXE fast 19mal so groß.
BeitragVerfasst: 21.04.2017 11:11 
Offline

Registriert: 31.12.2009 11:58
Der längere Code braucht mehr Zeit bei meinem Programm.
Deine Aussage hat bei dem Purebasic-ASM kein Wert.

Kannst selber Testen um deine Aussage zu festigen.

Gruss


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Warum ist das 2 .Programm als EXE fast 19mal so groß.
BeitragVerfasst: 21.04.2017 12:07 
Offline
StudiAdmin oder sowas in der Art
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Wenn der Code nicht komplett in den Cache passt, dann braucht er natürlich länger. Häufige Wiederholungen mit conditional JUMPs sollten heute auch dank Branchprediction und Konsorten gar nicht mehr viel ausmachen.

Dass dein Code aufgebläht wird, liegt ja offenbar daran, dass der repeat-Befehl unter fasm ein Makro ist und der dementsprechend den Code so häufig wiederholt wie angegeben. In diesen Dimensionen stelle ich mir das nicht sinnvoll vor. Der Befehle ist sicherlich nur dafür da ein bisschen Schreibarbeit zu sparen und dabei Copy&Paste-Fehler zu vermeiden.

Aber eine Kombination aus beidem stelle ich mir sinnvoll vor. Weniger Schleifendurchläufe und mehr Instruktionen pro Durchlauf.

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: CNC X-Achse Teil 2
Ubuntu Gnome 14.04 x64, PureBasic 5.50 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Warum ist das 2 .Programm als EXE fast 19mal so groß.
BeitragVerfasst: 21.04.2017 19:13 
Offline

Registriert: 31.12.2009 11:58
Ist sicherlich blöd, das ein Macro in dieser Dimension wiederholt in ASM eingesetzt wird.

Also totaler Blödsinn im Assembler oder ein fehlerhaftes Verhalten im Assembler ???

Gruss


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye