[std-interval] C++ interval std
Stephen.Clamage at Sun.COM
Wed Apr 5 05:51:32 PDT 2006
Alan Eliasen wrote:
> Bill Clarke wrote:
>>This experiment is extremely platform specific, as you probably are
>>aware. Most platforms in use today other than x86 will be the other way
>>around (add-by-value will be faster than add-by-const-ref).
> How can that assertion possibly be made? As you know, if a parameter
> is passed by value, then the copy constructor is automatically called
> for each object (e.g. twice for an add operator) on function entry, and
> then the destructor is called (twice) on function exit.
A simple object like complex or interval should have no user-defined copy
constructor or destructor. That is, the default copy constructor generated by
the compiler does the right thing and does not need to be user-defined. The
destructor has nothing to do, and so should not be user-defined. In that case,
pass-by-value can be optimized into register passing with no additional copying.
It is possible to construct a test case where pass-by-value gives worse
performance than pass-by-reference, and your example does indeed run faster with
pass-by-reference using Sun compilers at low optimization.
At high optimization, the compiler eliminated the loops and all but one call to
"add", which it inlined. I played with the test case for a short time, but was
unable to defeat the optimizer with minor changes.
I will need a little time to construct a test case that forces the compiler to
retain the loops and call the add functions. I'm at the C++ Committee meeting
right now, and don't have much time to work on this test.
Steve Clamage, stephen.clamage at sun.com
More information about the Std-interval