2010-07-14 1 views
0

Inst()이라는 개인 정적 메서드가 있다고 가정하면 클래스는 정적 메서드로 응용 프로그램에서 자체의 단일 인스턴스를 검색 할 수 있습니다. 어쩌면 INST()가 정의되어 뭔가 같은 ..로컬에서 저장하는 것과 비교하여 개체 검색의 오버 헤드

return App::GetApp()->CurrentState()->MyClass(); // Inst returns a reference 

는 성능이 매우 중요 응용 프로그램에서 ...

// I prefer this 
Inst().DoThis(); 
Inst().DoThat(); 
Inst().DoFoo(); 

에 ...

MyClass inst = Inst(); 
inst.DoThis(); 
inst.DoThat(); 
inst.DoFoo(); 

을 비교해이다 함수의 첫 번째 집합에서 오버 헤드가 아닌가? 현대 컴파일러가 이러한 것들을 최적화 할 수 있습니까?

내 경우에는 프로파일 링이 내 질문에 대한 답을 얻을 수 있지만 필자는 여기에서 엄지 손가락 법칙을 찾고 있습니다. 기존 데이터를 다시 검색하지 않고 로컬 변수에 저장하는 것이 얼마나 효과적입니까, 아니면 현대 컴파일러에서 일반적으로 최적화 된 다시 검색입니까?

+2

예가 다릅니다. 첫 번째 버전은 다른 버전이 사본을 만드는 참조에서 함수를 호출합니다. – pmr

+0

감사합니다. 참조에 지정하면 사본이 작성된다는 사실을 알지 못했습니다. (비록 컴파일러가 그것을 잡았을 것이기 때문에 나는 실제로 클래스의 복사 생성자와 할당을 제한했지만). – kroz

+0

그렇지 않습니다. 그러나 당신은 _reference_ ('MyClass & inst')에 할당하지 않지만, 당신은 복사 생성자 ('MyClass inst (const MyClass &)')로 새로운'MyClass'를 초기화하고 있습니다. –

답변

0

잘못된 것을 걱정하고 질문에 직접 답변했습니다. 프로파일 링하여 병목 현상이있는 경우 최적화하십시오.

어쨌든 : Inst()는 아마도 함수 호출 오버 헤드가 없기 때문에 정적이며 결과는 명백한 외부 매개 변수에 의존하지 않으므로 컴파일러가 완전히 최적화 할 수 있습니다 .