[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