[vox-tech] loop efficiency and testing against zero.

Micah J. Cowan micah at cowan.name
Fri Jun 16 14:21:34 PDT 2006


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/


More information about the vox-tech mailing list