This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Optimiziation questions (c++)
- From: NightStrike <nightstrike at gmail dot com>
- To: gcc-help <gcc-help at gcc dot gnu dot org>
- Date: Thu, 6 Dec 2007 12:59:41 -0500
- Subject: Optimiziation questions (c++)
(1)
I am curious about a certain aspect of how the g++ optimizer works at
-O3. If I have a for-loop, there are times when it is beneficial to
have a function call in the while-condition. For instance:
vector<int> v;
...
for ( int i=1; i < v.size(); ++i)
Now, I if v is not changing inside of that for-loop, then this would
appear at first glance to be more efficient:
int max = v.size();
for ( int i=1; i < max; ++i)
By using 'max' instead of v.size(), I am eliminating a function call
from every iteration of the for loop. If the loop is iterated a large
number of times, this could have an advantage. However, is it all the
same when you are optimizing? Does g++ remove the need for the second
method?
Before I end this email, I am sure that at least someone is thinking,
"Wait, you're using a vector, and using an old style for loop to
traverse it instead of iterators!" Well, yes, that's true. But I'm
doing that for two reasons -- 1) I'm interested in the question as it
stands, so I asked it the way I did, and 2) My next question will
already cover that, as it involves a comparison between traversing an
array as I do above and using iterators.
(2)
Is there a big difference in speed between using a standard for-loop
for vector traversal and using iterators? I already verified that I
can get a significant speed improvement (with very large N) by
accessing the vector directory with v[i] instead of using the at()
method. But what about iterators? If I write it with iterators
instead, will that be optimized out at -O3 to reduce to essentially
the same thing?