On Fri, Jun 16, 2006 at 12:52:17PM -0700, Tim Riley wrote: > Peter Jay Salzman wrote: > > I've read somewhere that a loop that runs from 0 to some number should be > > written to go in reverse order, e.g. instead of: > > > > for ( int i = 0; i < 10; ++i ) > > > > we should write: > > > > for ( int i = 9; i >= 0; --i ) > > I would think this: > for( int i = MAXINT; i; --i ); > is faster than this: > for( int i = 0; i < MAXINT; ++i ); > > However, on my machine they both took the > same time -- 3.24 seconds. > > I would think the test of 'i' > would be a single instruction and the test > of 'i < MAXINT' would take multiple > instructions. But surprise!
No, they are both exactly identical in meaning, and thus representable with exactly the same instructions. I don't know how GCC's optimizations work, but it's the compiler's job to handle rote optimizations like this; I imagine that if you enable -O3, GCC might (should) notice that you're not actually using the value of i, and optimize it to the decrement operation if appropriate. Optimization should always happen after implementation. -- Micah J. Cowan Programmer, musician, typesetting enthusiast, gamer... http://micah.cowan.name/ _______________________________________________ vox-tech mailing list [email protected] http://lists.lugod.org/mailman/listinfo/vox-tech
