000
08.02.2010, 18:24 Uhr
Prog
|
Ich weiß, ich bin im falschen Forum, sorry! aber ich hab kein passenderes gefunden (ggf. bitte verschieben!)
Hab grade mal mit meinem g++-4.4.3 folgenden Code übersetzt (Optimierung mit -O3 oder -O4):
C++: |
#include <iostream> #include <boost/timer.hpp>
int main(){ int x, y, z; std::cin >> x >> y >> z;
boost::timer timer; for(unsigned int i=0; i<4000000000; ++i){ x=z*2; y=x*4; z=(x+y)/8; } std::cout << timer.elapsed() << std::endl; }
|
Das liefert ungefähr 11.3 Sekunden. Wenn ich den Schleiferumpf nun durch folgendes ersetze, dauert das ganze nur noch 6.5 Sekunden:
C++: |
x=z<<1; y=x<<2; z=(x+y)>>3;
|
Warum führt mein Compiler eine solch einfache und offensichtliche Optimierung nicht durch? Gilt das Verhalten auch für andere Compiler?
Gruß prog |