이 시나리오 고려 : ~ 40시에 유사한 실행을 프로파일 링하는 동안getter를 사용하여 지역 변수의 즉각적인 대체?
class Test {
public:
Test() : _var{5} {}
inline int getVar() {
return _var;
}
private:
int _var;
}
void func(Test& t) {
int var = t.getVar();
int a = 1 + var;
int b = 2 + var;
...
int z = 26 + var;
}
int main() {
Test t;
for (int i = 0; i < 1000000; ++i) {
func(t);
}
}
을, 나는 getVar()가 바로 int를 액세스하기위한 큰 것 같다 0.8S, 주위에 나 혼자 전화 비용 것을 보았다.
그러나 로컬 변수와 Test의 getter를 사용하는 대신 my _var를 public으로 설정하고 직접 액세스하여 (t._var) 더 느립니다.
거의 즉시 "_var"에 액세스 할 수있는 마법 C++ 솔루션이 있습니까?
간단한 마술은 컴파일러에게 최적화를 요청하는 것입니다. –
어떻게 측정 했습니까? 그렇다면 어떤 컴파일러 최적화 수준이 사용 되었습니까? –
로컬 변수의 값을 캐싱하는 것은 컴파일러가 매회 메모리에서 값을 가져 오는 대신 레지스터에 값을 저장하도록하므로 최대한 빠릅니다. – molbdnilo