Objective-C에서 핸들러 (델리게이트 등)를 호출하는 것이 C++에서 가상 함수를 호출하는 것보다 훨씬 빠르다는 이야기를 들었습니다. 정말 맞습니까? 그렇다면 어떻게 될 수 있습니까?핸들러 호출 속도 : Objective-C 대 가상 함수
AFAIK, 가상 함수는 그렇게 느리게 호출하지 않습니다. 적어도 가상 함수가 호출 될 때 어떤 일이 발생하는지 이해하고 있습니다.
vtbl
에 대한 포인터를 얻습니다.- 포인터를 참조 해제하고 함수 포인터 배열의 시작 부분을 가져옵니다.
- 메서드의 인덱스를 사용하여 배열의 시작 부분을 오프셋 (포인터 단위). 컴파일 타임에 인덱스가 알려졌다는 것을 고려하면,
uintptr_t
의 배수를 추가하는 것만 큼 쉽습니다. call
명령어를 발행하십시오.
아쉽게도 Objective-C를 모르므로 성능을 비교하기가 어렵습니다. 그러나 최소한, 가상 함수 호출의 메커니즘은 그렇게 느리지 않습니까? 정적 함수 호출 이외의 다른 방법은 더 빠를 수 있습니까?
첫 번째 측정, 두 번째 최적화. 객관적인 메시지 전달의 오버 헤드가 실제로 CPU 사용의 상당 부분을 차지하는 상황에 있다면 놀랄 것입니다. 그것은 일어날 수 있지만 그렇게 자주는 아닙니다. – bbum
이 성능 테스트 프로젝트를 사용하여 모든 답변을 얻으십시오. https://github.com/LearnCocos2D/LearnCocos2D/tree/master/Cocos2D-Performance-Test – LearnCocos2D