On 2007-10-07 01:51:28 -0400, "9lives.9lives" <bajichuan@hotmail.comsaid:
Quote:
Hello, everyone! I am trying to optimize some code, but I don't think
I'm doing what I think I'm doing. I profiled my code and found that
the overloaded [] operator of my monomial class did
6384690328 calls in 33.67 seconds.
>
33.67 6384690328 Monomial::operator[](int) const
>
Since the parameter was an int, I made it const int& since I reasoned
I would be saving a copy of the int parameter to the stack by changing
from a pass-by-value to pass-by-reference. However, when I next ran
the code the overloaded operator made
6384690328 calls in 71.86 seconds.
>
Changing the from int to const int& actually slowed it down, more than
doubled the speed! I wonder if anyone can tell me why? My reasoning
must be faulty...
>
Here is the full function declaration:
inline int operator[](const int& i) const
{
assert(0 <= i && i < n);
return exp[i];
};
>
>
exp is an int*.
>
Any help or comments on how to speed up this simple function would be
most, most appreciated!
>
Very best regards,
Susan
The integer probably has the same size as a pointer. So you're not
saving much passing by value vs. passing by reference in this case.
However, when you pass by reference, you're really passing a pointer.
So, when the operator[] function uses it, it has to dereference it to
get the actual value of the integer. So, you're actually increasing
work at runtime.
Just a guess.
--
-kira