0

假设我有以下 C++ 类:

class Foo
{
  double bar(double sth);
};

double Foo::bar(double sth)
{
  double a,b,c,d,e,f
  a = b = c = d = e = f = 0;
  /* do stuff with a..f and sth */
}

函数 bar() 将在循环中被调用数百万次。显然,每次调用它时,都必须分配变量 a..f。通过使变量 a..f 成为 Foo 类的成员并在函数的入口点初始化它们,我会获得任何性能吗?另一方面,a..f 的值将通过 this-> 取消引用,所以我想知道这是否实际上可能导致性能下降。通过指针访问值是否有任何开销?谢谢!

4

3 回答 3

6

在我知道的所有架构上,内置函数的分配/解除分配是通过操作堆栈寄存器来完成的。我想与函数的其余部分相比,这几乎不需要任何时间。

如果您觉得增加/减少处理器寄存器中的值可能会有所帮助,那么您可以进行微优化。它们应该作为发货前的最后一件事完成,并且(作为所有优化)它们应该以测量为指导,而不是通过猜测。

于 2010-06-02T08:40:12.227 回答
3

如果变量确实是函数的本地变量并且没有在其他地方使用,那么它们应该是函数的本地变量。我看不出让他们成为会员将如何提高绩效。但是,您应该使用初始化而不是赋值:

double a = 0, b = 0, c = 0, d = 0, e = 0, f = 0;

这对于双精度数可能重要也可能不重要,但对于用户定义的类型(例如字符串)肯定是重要的。

于 2010-06-02T08:42:24.203 回答
3

访问堆栈分配的变量比访问类成员更快。堆栈变量使用堆栈指针取消引用,而不使用类指针。只有在程序算法需要时才添加新的类成员。在声明中直接初始化栈变量:

双倍 a = 0.0, b = 0.0 ...

于 2010-06-02T08:43:37.833 回答