Archived

This topic is now archived and is closed to further replies.

Killer framerates.

This topic is 5935 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

ummm, that code was chruned out in debug mode with no optimizations thank you very much.


MENTAL

Share this post


Link to post
Share on other sites
I didn''t look at the assembly listning.
And there is a diffrence trust me on that.
But most of the time it doesnt matter, but when using
classes with operator overloading it does. It''s even made it way into most of the litterature on C++ by now just because it''s a so common missconception that they are the same.

Share this post


Link to post
Share on other sites
In The C++ Programming Language 3rd Ed. by Bjarne Stroustrup (the creator of C++) this is how the increment operator works.

y = ++x;
is equivalent to
y = (x+=1);

while
y = x++;
is equivalent to
y = (t=x, x+=1, t) where t is a variable of the same type as x.

Perhaps modern compilers (i.e. VC++) produce the same assembly code for both, but the official definition of C++ says that there is a difference. I hope that clears that up.

--Buzzy

Share this post


Link to post
Share on other sites
Right, ++i and i++ is not the same but it should not be any speed difference. Perhaps it was different a long time ago with bad compilers and no cache.
If you are working in a team will "optimized" non convetional code just annoy the other members.

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
quote:
Original post by buzzy_b
In The C++ Programming Language 3rd Ed. by Bjarne Stroustrup (the creator of C++) this is how the increment operator works.

y = ++x;
is equivalent to
y = (x+=1);

while
y = x++;
is equivalent to
y = (t=x, x+=1, t) where t is a variable of the same type as x.

Perhaps modern compilers (i.e. VC++) produce the same assembly code for both, but the official definition of C++ says that there is a difference. I hope that clears that up.

--Buzzy


No one says they are the same. The ++x returns the incremented value, and x++ returns the value before increment. That t value only makes an appearance because they wanted to write it in one line of C in the spec. Remember, the spec is defining the behavior of the statements, but you are free to use any _equivalent_ implementation and you will still be following the standard.

Assembly doesn''t do as much in a single line as C, so it is going to roll out into multiple statements.

Here, let me write an equivalent statement to the spec''s in C (with multiple statements).

y = ++x;
is equivalent to:
x = x + 1; y = x;
while
y = x++
is:
y = x;x = x + 1;

Same number of operations, See?

You do often need some extra space when it''s an overloaded operator on a class, but in C, there is _no_ speed difference. C++ /might/ have a difference, depending on how the programmer wrote the pre and post increment functions. But I could certainly overload my operators in such a way that postincrement would be faster, if I so desired.

Share this post


Link to post
Share on other sites