好的我知道标题并没有完全解释这个问题.所以我正在编写一个执行大量计算的程序,我正在尝试对其进行优化,以便它不会运行得那么慢.我有一个函数,它是一个被调用大约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;
}
Run Code Online (Sandbox Code Playgroud)
我想知道在类中声明变量vpPointx和vpPointy是否更好/更快,而不是每次调用函数时都声明它们.这是一个很好的优化还是效果不大?
一般来说,如果这里有任何可以优化的东西,请告诉我.
Gre*_*ill 10
通过限制变量的范围,您可以为编译器优化器提供更多机会来重新排列代码并使其运行更快.例如,它可能将这些变量的值完全保留在CPU寄存器中,这可能比内存访问快一个数量级.此外,如果这些变量是类实例变量,那么编译器this每次访问它们时都必须生成解除引用的代码,这很可能比本地变量访问慢.
与往常一样,您应该自己测量性能并以两种方式尝试代码(或者更好,尽可能多的方式).所有优化建议都取决于您的编译器实际执行的任何操作,这需要进行实验.