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