Java 또는 Python과 비교할 때 C 또는 C ++의 다양한 속도 장점에 대해 많은 논의가있는 것처럼 보이지만 Objective-C는 거의 언급하지 않습니다. 언어 성능 측면에서 대략 어디에 있습니까?
Java 또는 Python과 비교할 때 C 또는 C ++의 다양한 속도 장점에 대해 많은 논의가있는 것처럼 보이지만 Objective-C는 거의 언급하지 않습니다. 언어 성능 측면에서 대략 어디에 있습니까?
답변:
C ++과 달리 Objective-C는 C의 깔끔한 수퍼 세트로 설계되었습니다. 내가 사용한 소수의 Objective-C 컴파일러는 C 컴파일러로 잘 알려져 있지만 Objective-C도 처리합니다.
따라서 코드 생성 수준에서 C와 Objective-C는 동일하다고 가정하는 것이 안전합니다.
첫 번째 차이점은 "late method binding"이라고도하는 OOP ABI에 나타납니다. C ++에서와 마찬가지로 Objective-C는 런타임에 순회하는 컴파일러 생성 함수 포인터 테이블을 사용합니다.
그러나 C ++과 달리 바인딩 방법은보다 '동적'이며 id
수퍼 클래스 사용을 촉진하여 이론적으로 C ++보다 약간 느립니다. 실제로이 차이는 측정 할 수없는 수준입니다.
마지막으로 가장 중요한 성능 문제는 사용 된 라이브러리의 품질입니다. Objective-C는 Apple 시스템에서만 널리 사용되므로 Cocoa와 함께 사용한다고 가정하는 것이 합리적입니다. 이것은 고급 라이브러리의 훌륭한 세트입니다. 대부분의 경우 무거운 리프팅을 남겨 둘 수 있으므로 코드가 너무 빠를 필요가 없거나 무거운 크 런칭을 수행하는 경우 일반 C와 거의 비슷한 정적 코드 코드 일 가능성이 높습니다 .
TL; DR : 가장 중요한 곳에 C 및 C ++ 언어가 있습니다. 성능이 좋지 않으면 알고리즘을 확인하십시오. 다른 어떤 언어에서도 마찬가지입니다.
Objective-C는 C / C ++보다 느립니다. 그 이유는 스몰 토크와 동일한 방식으로 메소드 검색을 동적으로 디스패치하는 Objective-C의 런타임이기 때문에이 실행 모델을 인수 한 것입니다. 컴파일 타임에 함수 주소가 결정되는 C / C ++에서의 함수 호출과 달리 런타임시 모든 메소드를 "진짜 메시지 전송"이라고합니다 (C ++ 가상 메소드 제외). 그러나 Objective-C가 얼마나 느린 지 말할 수 없습니다. ASAIK는 성능 저하로 인해 응용 프로그램 개발에만 사용됩니다.
짧은 대답 : C / C ++ / D / Go / Rust와 비슷한 형식으로 컴파일됩니다. Java / .Net과 같은 가상 환경을 사용하지 않습니다. 그리고 그것은 Python / Ruby / Lua / JavaScript처럼 해석되지 않습니다. 따라서 스펙트럼의 가장 빠른 끝에 있습니다.
Oliver가 아래에 언급 한 것처럼 Obj-C와 C / C ++의 기본 속도 차이는 동적 메서드 디스패치 때문입니다.
이 기사는 Obj-C http://it.toolbox.com/blogs/macsploitation/bypassing-objectivecs-message-passing-mechanism-for-speed-24946 에서이 오버 헤드를 프로파일 링
또한 메소드 디스패치 (예 : objc_msgSend)가 제한 요인이라고 판단 할 때 Obj-C 코드를 최적화하기위한 매우 유용한 트릭을 제공합니다. 함수에 대한 포인터를 한 번 얻은 다음이를 여러 번 호출하는 데 사용하십시오. Obj-C 런타임이이 최적화를 자동으로 수행 하므로 너무 도움이되지 않습니다 .
동적 메소드 디스패치의 실제 비용은 CPU 분기 예측을 위반하므로 캐시 누락으로 인한 것입니다. 이것들은 프로파일하기가 어렵고 위에 인용 된 코드가 실제 캐시 미스 비용을 측정하지 않을 수도 있습니다.
좀 더 유용한 토론이 여기 있습니다 : http://www.cocoabuilder.com/archive/cocoa/106535-instance-variable-access.html#106605
결론 : 언어 간의 가장 큰 차이점은 알고리즘입니다. 게다가 동적 또는 가상 메소드 디스패치로 인해 Obj-C, C 및 C ++간에 기본 속도 차이가 있습니다. 이 두 번째 요점은 크지 않은 것 같습니다. 그리고 위의 기사는 프로파일 링을 통해 핫스팟을 찾을 수있는 경우 CPU 캐시 누락으로 인해 어려울 수있는 경우 이를 최적화하기위한 트릭을 제공합니다 .