inline functions

Steven Schveighoffer schveiguy at yahoo.com
Mon Mar 28 06:08:23 PDT 2011


On Fri, 25 Mar 2011 22:04:20 -0400, Caligo <iteronvexor at gmail.com> wrote:

> T[3] data;
>
> T dot(const ref Vector o){
>     return data[0] * o.data[0] + data[1] * o.data[1] + data[2] *  
> o.data[2];
> }
>
> T LengthSquared_Fast(){ return data[0] * data[0] + data[1] * data[1] +
> data[2] * data[2]; }
> T LengthSquared_Slow(){ return dot(this); }
>
>
> The faster LengthSquared() is twice as fast, and I've test with GDC
> and DMD.  Is it because the compilers don't inline-expand the dot()
> function call?  I need the performance, but the faster version is too
> verbose.

ref parameters used to make functions not be inlined, but apparently that  
was fixed: http://d.puremagic.com/issues/show_bug.cgi?id=2008

The best thing to do is check the disassembly to see if the call is being  
inlined.

Also, if you want more help besides guessing, a complete working program  
is good to have.

-Steve


More information about the Digitalmars-d-learn mailing list