amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > BlitzBasic Decompiler? [ - Suche - Neue Beiträge - Registrieren - Login - ]

1 -2- [ - Beitrag schreiben - ]

06.02.2014, 10:30 Uhr

Thore
Posts: 2266
Nutzer
> Es wird ja nicht eine Mega Runtime dazu gelinked, sondern diese ist in ca. 250 kleine Module zerteilt, von denen selectiv gelinkt wird.

Das ist prinzipiell der gängigste Weg um ein Optimum zu erreichen.
Ich denk auch nicht, daß ein "Hello World" das Ziel von BlitzBasic ist, das kann ich auch mit einem Shell Befehl.

Die Link-Libs bleiben ja immer gleich groß und fallen bei größeren Projekten dann gar nicht mehr nennenswert ins Gewicht.

Wer es am Ende kleiner haben will, kann ja einen Binary Packer verwenden ;)

Zum Optimieren und Filegröße ein Beispiel (von vielen):
Wenn die fixen Schleifen "urolled" werden, also aufgedröselt ohne Schleife, wird das Programm zwar schneller aber größer. Es ist also nicht richtig, daß das kleinere welches das gleiche tut, auch automatisch besser oder schneller ist.

[ - Antworten - Zitieren - Direktlink - ]

06.02.2014, 13:13 Uhr

Holger
Posts: 8038
Nutzer
Zitat:
Original von Thore:
Wenn die fixen Schleifen "urolled" werden, also aufgedröselt ohne Schleife, wird das Programm zwar schneller aber größer. Es ist also nicht richtig, daß das kleinere welches das gleiche tut, auch automatisch besser oder schneller ist.

Es ist aber auch nicht richtig, dass größer gleich schneller ist. Wenn Du eine Schleife aufrollst und sie dann nicht mehr in den CPU Cache passt, ist sie möglicherweise unterm Strich langsamer geworden.

Das ist für unbenutzte Funktionen aber irrelevant. Die haben auf die Performance keinen Einfluss, höchstens auf die Ladezeit.

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

06.02.2014, 14:00 Uhr

Thore
Posts: 2266
Nutzer
@Holger:
Ich hab nicht behaupter, dass allgemein größer gleich schneller ist ;) Ich hab nur _ein_ Gegenargument gebracht, dass kleiner nicht unbedingt schneller ist.
Es hängen viele Faktoren zusammen. Z.B.
auf dem 68060 wird ein unrolling weniger bringen als auf einem 68030, da der 060er einen Jump-Cache hat. Daneben gibt es noch die Art des Algorithmus und Befehle die das gleiche tun aber langsamer sind (Div 2 statt Rol 1)

Klar. Aber darum gings mir nicht, es ging mir in dem "Ausflug" nur um das Statement dass kleiner "besser" sei.

Hat auch mit BlitzBasic nicht viel zu tun, da es hier ja um die Link-Libs geht. Aber die ungenutzten Funktionen stören ja nicht bei einem "echten" Projekt, wie gesagt, es ist nicht auf "Hello World" Programme beschränkt.


[ - Antworten - Zitieren - Direktlink - ]

07.02.2014, 01:17 Uhr

huepper
Posts: 481
Nutzer
Was macht eigentlich Bernd (Rösch) heute, man hört und liest gar nix mehr von ihm ?
--
Signatur ? hmm wo hab ich sie nur wieder ?

[ - Antworten - Zitieren - Direktlink - ]

07.02.2014, 09:12 Uhr

Blackbird
Posts: 634
Nutzer
Von Bernd hat so gut wie keiner mehr was gehört...

Nach all den Anstrengungen für ihn an den Source zu Stormwizard zu kommen ist er einfach nach kurzer Zeit abgetaucht. Vieleicht ist er ja fahradfahren auf Hawai oder macht ne Busreise in der Karibik 8o
--
regards
Blackbird


[ - Antworten - Zitieren - Direktlink - ]

07.09.2014, 22:18 Uhr

inq
Posts: 445
Nutzer
Zitat:
Original von Der_Wanderer:
Naja, wie gesagt kann der Assembler oder ein anderes Tool gar nicht wissen welche Code Stellen unbenutzt sind, es sei denn es gibt nur konstante Sprünge und keine (Sprung-)Adresse wird an externe Libraries rausgegeben.
...



(Ausgrab)

Kann er nicht? Also, DevPac z.B. weiß nach dem Assemblieren nicht, daß es "Subroutinen"/Codesegmente gibt, die nicht ausgeführt werden?

z.B. ein "if 0 then gosub label" könnte der ASM nicht erkennen und das dann wegoptimieren?
Oder ein Label nach einem RTS, das niemals im Code referenziert wird, bleibt sammt nachfolgendem Code im Exec?

Sollte da nicht irgendein Preprocessor durchfegen? ?(
--
Config:
A1200/30/50/FPU/SCSI/64MB, WinUAE/40/xx/xxMB, EUAE/40/25/xxMB, CDTV, CD32/SX32MK2/HD - AOS3.5

[ - Antworten - Zitieren - Direktlink - ]

08.09.2014, 08:52 Uhr

thomas
Posts: 7649
Nutzer
@inq:

Code der nicht offensichtlich referenziert wird, kann trotzdem ausgeführt werden.

code:
anfang:
	lea	tab,a0
	lsl.l	#2,d0
	add.l	d0,a0
	jmp	(a0)

tab:	bra	a

	bra	b	; und die hier
	bra	c	; würdest du
	bra	d	; alle wegoptimieren
	bra	e	; weil sie ja nirgendwo
	bra	f	; referenziert werden?


Das gäbe aber ein paar hübsche "unerklärliche" Abstürze, besonders bei einem größeren Projekt.

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ Dieser Beitrag wurde von thomas am 08.09.2014 um 08:53 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

08.09.2014, 14:27 Uhr

Holger
Posts: 8038
Nutzer
Zitat:
Original von inq:
Zitat:
Original von Der_Wanderer:
Naja, wie gesagt kann der Assembler oder ein anderes Tool gar nicht wissen welche Code Stellen unbenutzt sind, es sei denn es gibt nur konstante Sprünge und keine (Sprung-)Adresse wird an externe Libraries rausgegeben.
...

Kann er nicht? Also, DevPac z.B. weiß nach dem Assemblieren nicht, daß es "Subroutinen"/Codesegmente gibt, die nicht ausgeführt werden?

z.B. ein "if 0 then gosub label" könnte der ASM nicht erkennen und das dann wegoptimieren?

Die Antwort darauf erhält man, wenn man in der von Dir zitierten Aussage die Betonung auf „es sei denn es gibt nur konstante Sprünge und keine (Sprung-)Adresse wird an externe Libraries rausgegeben“ legt.

Die Antwort lautet also, in der Praxis weiß er das eben nicht. Abgesehen davon ist Assembler nun mal keine Hochsprache. Da gilt, wenn Du eine Sequenz von Befehlen hinschreibst, dann wirst Du Deinen Grund dafür haben und der Compiler wird sie nicht eigenmächtig entfernen.

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

08.09.2014, 19:05 Uhr

inq
Posts: 445
Nutzer
Zitat:
Original von thomas:
@inq:

Code der nicht offensichtlich referenziert wird, kann trotzdem ausgeführt werden.

code:
anfang:
	lea	tab,a0
	lsl.l	#2,d0
	add.l	d0,a0
	jmp	(a0)

tab:	bra	a

	bra	b	; und die hier
	bra	c	; würdest du
	bra	d	; alle wegoptimieren
	bra	e	; weil sie ja nirgendwo
	bra	f	; referenziert werden?


Das gäbe aber ein paar hübsche "unerklärliche" Abstürze, besonders bei einem größeren Projekt.


Hm, haben wir da wirklich "erlaubten" Code vor uns? Macht das wirklich jemand so, einfach ein paar Bytes voraus?
Im übrigen hast du ja "tab" referenziert, und a-f sind keine Labels (falls ich das korrekt verstehe, was das da oben soll ?( )
Falls a-f jedoch Labels sind, hast du sie ja referenziert mit den "bra"s.

Mal ein stupides Beispiel:

RTS noch vor anfang:

D.h. das Programm ist eigentlich gleich zuende. Ich weiß nicht, wie ein ASM assembliert, aber da muß doch irgendwo eine Sprungtabelle oder was auch immer sein. Wenn da überhaupt kein Sprung hinzeigt, was dann? Label tab gibt es noch, Label Anfang auch noch...aber nix springt dahin. ?(

*Edit:
Nein, ich will euch nicht ärgern, ich versuche zu verstehen, wie das Assemblieren funktioniert. :look:

--
Config:
A1200/30/50/FPU/SCSI/64MB, WinUAE/40/xx/xxMB, EUAE/40/25/xxMB, CDTV, CD32/SX32MK2/HD - AOS3.5


[ Dieser Beitrag wurde von inq am 08.09.2014 um 19:15 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

11.09.2014, 13:40 Uhr

Holger
Posts: 8038
Nutzer
Zitat:
Original von inq:
Hm, haben wir da wirklich "erlaubten" Code vor uns? Macht das wirklich jemand so, einfach ein paar Bytes voraus?

Ja, so macht das jede Amiga-Library. Um die n-te Funktion aufzurufen, wird an die Adresse „Library-Basis - n*6“ gesprungen.
Zitat:
Im übrigen hast du ja "tab" referenziert, und a-f sind keine Labels (falls ich das korrekt verstehe, was das da oben soll ?( )
Falls a-f jedoch Labels sind, hast du sie ja referenziert mit den "bra"s.

Es sind die bra-Befehle, die aus Sicht des Assemblers alle, bis auf den ersten, nicht benutzt werden. Aber, wie gesagt, das interessiert den Assembler nicht…

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]


1 -2- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > BlitzBasic Decompiler? [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1997-2019 by amiga-news.de - alle Rechte vorbehalten.
.