好的,我知道标题不能完全解释这个问题。因此,我正在编写一个执行大量计算的程序,并尝试对其进行优化,以使其运行不会太慢。我有一个函数,该函数是一个类的成员,该函数被调用约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是否比每次调用函数时声明它们更好/更快。这将是一个很好的优化还是效果不大?
通常,如果这里有任何可以优化的内容,请告诉我。
通过限制变量的范围,您为编译器优化器提供了更多机会来重新排列代码并使其运行更快。例如,它可以将那些变量的值完全保留在CPU寄存器中,这可能比内存访问快一个数量级。另外,如果这些变量是类实例变量,则编译器将不得不在this每次访问它们时生成代码以解除引用,这很可能会比局部变量访问慢。
this
与往常一样,您应该自己衡量性能,并尝试两种方式的代码(或更好的方式,尽可能多地尝试一下)。所有优化建议都取决于编译器实际执行的操作,这需要进行实验。