假设我有以下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 */
}

函数栏()将在循环中称为数百万次。显然,每次称为变量A..f都必须分配。我是否可以通过使变量A..F类的成员来获得任何性能,而只是在函数的输入点初始化它们?另一方面,A..f的值将通过此 - >进行解释,因此我想知道它实际上不是可能的性能退化。是否有开销可以通过指针访问值?谢谢!

有帮助吗?

解决方案

访问堆栈分配变量的速度比集体成员快。使用堆栈指针对堆栈变量进行了验证,而无需使用类指针。仅在程序算法需要时添加新类成员。直接在声明中初始化堆栈变量:

双a = 0.0,b = 0.0 ...

其他提示

在所有架构上,我知道内置的分配/交易是通过操纵堆栈寄存器完成的。我想与其余功能相比,这几乎没有时间。

如果您觉得在处理器寄存器中的增量/降低值可能会有所帮助,那么您将无法实现微观化。它们应作为运输前的最后一件事,并且(作为所有优化)应指导他们 测量, ,不是通过猜测。

如果变量确实是该函数本地的,并且无处可在其他地方使用,则它们应该是该函数的本地化。我看不到如何使他们成员提高性能。但是,您应该使用初始化而不是分配:

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

对于双打而言,这可能会或可能不是重要的,但是对于用户定义的类型(例如字符串)肯定会很重要。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top