release mode optimization
Jonathan M Davis
jmdavisProg at gmx.com
Wed Jan 9 16:40:09 PST 2013
On Wednesday, January 09, 2013 16:14:47 Charles Hixson wrote:
> Would the following code:
> for (int i = 1; i < di.count; i++)
> { assert (node.di.entry[i - 1].key < node.di.entry[i].key); }
>
> be optimized away if compiled under -release?
If you compile with -release, assertions will be compiled out, so you'd get
for(int i = 1; i < d.count; i++)
{}
However, I don't believe that -release enables any optimizations - that's what
-O is for - so the loop would likely be left in with -release. If you compile
with -O, it _might_ be optimized out. I don't know. It would be great if it
did, but you'd have to test it to know for sure. But that's not hard to do at
all (in fact, it wouldn't have taken much longer to test it then to post your
question). In fact, if I test it now...
This code
import std.conv;
import std.datetime;
import std.stdio;
void main()
{
auto sw = StopWatch(AutoStart.yes);
foreach(i; 0 .. 50_000_000)
{}
writeln(to!Duration(sw.peek));
}
takes just over 37ms on my machine. If I remove the foreach, it takes about 3
hnsecs. So clearly, dmd does _not_ optimize out the loop. I have no idea what
gdc and ldc do though.
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list