在浏览开源代码(来自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的另一个问题我得出的结论是,这实际上是否需要完成或由编译器自动完成的答案可能是编译器/设置依赖的.
我的问题是,如果_foo是static集体成员会有什么不同吗?在手动优化中是否还有一点,或者访问静态类成员不比访问本地变量更"昂贵"?
PS - 我是出于好奇而不是解决具体问题.
访问属性意味着取消引用该对象,以便访问它.
由于属性可能在执行期间发生变化(读取线程),因此每次访问该值时,编译器都将从内存中读取值.
使用局部变量将允许编译器使用寄存器作为值,因为它可以安全地假设该值不会从外部更改.这样,该值只从内存中读取一次.
关于你关于静态成员的问题,它是相同的,因为它也可以被另一个线程改变,例如.编译器还需要每次从内存中读取值.
| 归档时间: |
|
| 查看次数: |
684 次 |
| 最近记录: |