C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Compiler-Optimierung

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Benjamin von Eicken
Guest





PostPosted: Wed Jun 09, 2004 8:34 pm    Post subject: Compiler-Optimierung Reply with quote



Hi

Ich habe folgende Frage:

Wenn ich ein Konstrukt habe wie:

do {
\ BlaBla
}
while (irgendEinBoolscherAusdruck);

wird in jedem Durchlauf die Beingung geprüft.
Falls diese konstant true ist, lässt der Compiler
die Abfrage weg?

Also wenn ich das ganz in pseudo-Assembler-Code schreibe
etwa so:

\ Erste Variante

LABEL Test
\ BlaBla
EQUALS irgendEinBoolscherAusdruck,true JUMP Test

und wenn der Ausdruck immer true ist (eine Kosntante), ob dann etwas wie

LABEL Test
\ BlaBla
JUMP Test

dabei rumkommt.
Gibt es da einen Standard, auf den ich mich verlassen kann?

MfG

Benjamin von Eicken

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Falk Tannhäuser
Guest





PostPosted: Thu Jun 10, 2004 9:48 am    Post subject: Re: Compiler-Optimierung Reply with quote



Benjamin von Eicken wrote:
Quote:

Wenn ich ein Konstrukt habe wie:

do {
\ BlaBla
}
while (irgendEinBoolscherAusdruck);

wird in jedem Durchlauf die Beingung geprüft.
Falls diese konstant true ist, lässt der Compiler
die Abfrage weg?
[snip]
Gibt es da einen Standard, auf den ich mich verlassen kann?

Alles eine Frage der Implementierungsqualität - der Standard
verbietet dem Compilerbauer nicht mal, das Programm nach jedem
Schleifendurchlauf 10 Minuten warten zu lassen Smile.
Im Ernst - praktisch würde ich erwarten, dass ein moderner
Compiler den Test weglässt und einen unbedingten Sprung einbaut,
sofern der zu testende bool-Ausdruck eine bereits bei der
Übersetzung bekannte Konstante ist.
Ein kleiner Test mit gcc 3.3.1 cygwin, wobei der erzeugte Kode
mittels "objdump -DC -S <exe_file>" angeguckt werden kann,
zeigt dann auch, dass nicht nur der Test wegoptimiert wird,
sondern auch infolgedessen nicht erreichbarer Kode gar nicht erst
ins erzeugte Programm gesteckt wird (sei es mit 'if/else', 'while',
'do/while' oder 'for').

Andere moderne Compiler sollten das eigentlich nicht schlechter
hinkriegen als gcc, besonders wenn sie mehr kosten!
Falls erwünscht, lässt sich diese Optimierung mittels gut
plaziertem 'volatile' verhindern.

MfG
Falk

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Rolf Magnus
Guest





PostPosted: Thu Jun 10, 2004 10:22 am    Post subject: Re: Compiler-Optimierung Reply with quote



Benjamin von Eicken wrote:

Quote:
Hi

Ich habe folgende Frage:

Wenn ich ein Konstrukt habe wie:

do {
\ BlaBla
}
while (irgendEinBoolscherAusdruck);

wird in jedem Durchlauf die Beingung geprüft.
Falls diese konstant true ist, lässt der Compiler
die Abfrage weg?

Sicher ist das zwar nicht, aber ich würde es von einem guten Compiler
erwarten. Für Endlosschleifen gibt es aber den Konstrukt:

for (;Wink
{
//tu was
}

Auch recht häufig ist die while-Schleife in anderer Richtung:

while (true)
{
//tu was
}

Falls es speziell um Endlosschleifen geht, würde ich diese Varianten
bevorzugen, da man schon am Kopf erkennt, daß die Schleife eine
Endlosschleife ist.

Quote:
Also wenn ich das ganz in pseudo-Assembler-Code schreibe
etwa so:

\ Erste Variante

LABEL Test
\ BlaBla
EQUALS irgendEinBoolscherAusdruck,true JUMP Test

und wenn der Ausdruck immer true ist (eine Kosntante), ob dann etwas
wie

LABEL Test
\ BlaBla
JUMP Test

dabei rumkommt.
Gibt es da einen Standard, auf den ich mich verlassen kann?

Nein. Die C++-Norm legt nicht fest, was genau ein Compiler aus einem
bestimmten Stück Code macht, sondern nur, wie sich das resultierende
Programm verhält.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.