From: Jari H. <ja...@fl...> - 2011-07-28 13:19:04
|
On 2011-07-28 14.33, Gene Buckle wrote: > On Thu, 28 Jul 2011, Stefan Seifert wrote: > >> On Thursday 28 July 2011 01:00:10 Hal V. Engel wrote: >> >>> But there is one minor and very common issue with the code that should be >>> fixed. In the for loop >>> >>> for (..; ..; j++) >>> >>> should be >>> >>> for (..; ..; ++j) >>> >>> if you use j++ the compiler has to make a copy of j with each iteration of >>> the loop but if you use ++j it does not have to make a copy. This will >>> make the loop more efficient although only by a small amount. >> >> Are you sure about that? I just tried it with a little example and at least >> gcc compiles both variants to the exact same assembly code. Tried it with and >> without -O2. >> > That would freak me out. Doesn't "++j" mean "increment j, then test" > whereas "j++" means "test j, then increment"? No, for a for loop for ( [1]; [2]; [3] ) where [3] is ++j will increment j before use. However, in an if-statement the complete statement [3] is evaluated before the test [2] is done. If the compiler is smart it will produce the fastest binary code regardless ++j or j++. However, if the [3] is more complicated like a hypothetical i = ++j + k the compiler will most probably generate different binary code (compared to i = ++j + k). Jari |