将静态类成员复制到本地变量以进行优化

Rot*_*tem 4 c++ optimization

在浏览开源代码(来自OpenCV)时,我在方法中遇到了以下类型的代码:

// copy class member to local variable for optimization
int foo = _foo; //where _foo is a class member

for (...) //a heavy loop that makes use of foo
Run Code Online (Sandbox Code Playgroud)

从SO的另一个问题我得出的结论是,这实际上是否需要完成或由编译器自动完成的答案可能是编译器/设置依赖的.

我的问题是,如果_foostatic集体成员会有什么不同吗?在手动优化中是否还有一点,或者访问静态类成员不比访问本地变量更"昂贵"?

PS - 我是出于好奇而不是解决具体问题.

Mac*_*ade 6

访问属性意味着取消引用该对象,以便访问它.

由于属性可能在执行期间发生变化(读取线程),因此每次访问该值时,编译器都将从内存中读取值.

使用局部变量将允许编译器使用寄存器作为值,因为它可以安全地假设该值不会从外部更改.这样,该值只从内存中读取一次.

关于你关于静态成员的问题,它是相同的,因为它也可以被另一个线程改变,例如.编译器还需要每次从内存中读取值.