Some performance questions

Lars Kyllingstad public at kyllingen.NOSPAMnet
Mon Feb 2 05:31:43 PST 2009


I have some functions for which I want to find the nicest possible 
combination of performance and usability. I have two suggestions as to 
how they should be defined.

"Classic" style:

     real myFunction(real arg, int someParam, inout real aReturnValue)
     {
         declare temporary variables;
         do some calculations;
         store a return value in aReturnValue;
         return main return value;
     }

The user-friendly way, where the function is encapsulated in a class:

     class MyFunctionWorkspace
     {
         declare private temporary variables;

         real anotherReturnValue;

         this (int someParam)
         { ... }

         real myFunction(real arg)
         {
             do some calculations;
             store a return value in aReturnValue;
             return main return value;
         }
     }

I'm sure a lot of people will disagree with me on this, but let me first 
say why I think the last case is more user-friendly. For one thing, the 
same class can be used over and over again with the same parameter(s). 
Also, the user only has to retrieve aReturnValue if it is needed. If 
there are many such "additional" inout parameters which are seldom 
needed, it gets tedious to declare variables for them every time the 
function is called. I could overload the function, but this also has 
drawbacks if there are several inout parameters with the same type.

My questions are:

- If I do like in the second example above, and reuse temporary 
variables instead of allocating them every time the function is called, 
could this way also give the best performance? (Yes, I know this is bad 
form...)

...or, if not...

- If I (again in the second example) move the temporary variables inside 
the function, so they are allocated on the stack instead of the heap 
(?), will this improve or reduce performance?

I could write both types of code and test them against each other, but I 
am planning to use the same style for several different functions in 
several modules, and want to find the solution which is generally the 
best one.

-Lars


More information about the Digitalmars-d-learn mailing list