Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Copy static class member to local variable for optimization

While browsing open source code (from OpenCV), I came across the following type of code inside a method:

// 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

From another question on SO I've concluded that the answer to whether or not this actually needs to be done or is done automatically by the compiler may be compiler/setting dependent.

My question is if it would make any difference if _foo were a static class member? Would there still be a point in this manual optimization, or is accessing a static class member no more 'expensive' than accessing a local variable?

P.S. - I'm asking out of curiosity, not to solve a specific problem.

like image 474
Rotem Avatar asked Jan 15 '23 10:01

Rotem


1 Answers

Accessing a property means de-referencing the object, in order to access it.

As the property may change during the execution (read threads), the compiler will read the value from memory each time the value is accessed.

Using a local variable will allow the compiler to use a register for the value, as it can safely assume the value won't change from the outside. This way, the value is read only once from memory.

About your question concerning the static member, it's the same, as it can also be changed by another thread, for instance. The compiler will also need to read the value each time from memory.

like image 88
Macmade Avatar answered Jan 30 '23 23:01

Macmade