一尘不染

使用类变量或局部函数变量是否更好/更快?

c++

好的,我知道标题不能完全解释这个问题。因此,我正在编写一个执行大量计算的程序,并尝试对其进行优化,以使其运行不会太慢。我有一个函数,该函数是一个类的成员,该函数被调用约500万次。这是功能:

void PointCamera::GetRay(float x, float y, Ray& out)
{
    //Find difference between location on view plane and origin and normalize
    float vpPointx = pixelSizex * (x - 0.5f * (float)width);
    float vpPointy = pixelSizey * (((float)height - y) - 0.5f * height);

    //Transform ray to camera's direction
    out.d = u * vpPointx + v * vpPointy - w * lens_distance;
    out.d.Normalize();

    //Set origin to camera location
    out.o = loc;
}

我想知道在类中声明变量vpPointx和vpPointy是否比每次调用函数时声明它们更好/更快。这将是一个很好的优化还是效果不大?

通常,如果这里有任何可以优化的内容,请告诉我。


阅读 395

收藏
2020-09-27

共1个答案

一尘不染

通过限制变量的范围,您为编译器优化器提供了更多机会来重新排列代码并使其运行更快。例如,它可以将那些变量的值完全保留在CPU寄存器中,这可能比内存访问快一个数量级。另外,如果这些变量是类实例变量,则编译器将不得不在this每次访问它们时生成代码以解除引用,这很可能会比局部变量访问慢。

与往常一样,您应该自己衡量性能,并尝试两种方式的代码(或更好的方式,尽可能多地尝试一下)。所有优化建议都取决于编译器实际执行的操作,这需要进行实验。

2020-09-27