正如克雷格在Swift宣布中所揭示的那样,据说它远远超过Objective-C。
但我并不相信这种比较,因为正确实现的算法在C中应该是最快的,因为它可以由编译器高度优化,并且本质上是硬件友好的。 所以我猜想Swift可以获得的最佳性能,就是C中相同算法的性能。
由于C是Objective-C的一部分,为什么Objective-C和Swift性能之间存在很大差距?
我能想象的唯一原因是Apple使用NSNumbers而不是C类型,但不应该是Obj-C的基础 - Swift比较,对吗?
答案 0 :(得分:3)
这在很大程度上是猜测(尽管有知情的推测),但我的两大理论是:
1)否减少动态方法调度。 Objective-C中的每个方法调用都经过objc_msgSend
。在最快的情况下,这可以快16指令,但它也可以慢很多。 Swift会在比Objective-C更少的情况下产生这种惩罚,例如:对swift-only协议方法的方法调用不会命中objc_msgSend
,但是如果协议是在Obj-C中声明的,或者是swift协议用@objc
装饰(这样它也可以被Objective-C对象采用),然后swift对象采用的方法中的方法调用似乎是通过objc_msgSend
调度的。
2)避免堆分配。在Objective-C中,(有效地)每个对象都是堆分配的。使用静态类型系统,编译器可以更多地推断对象的生命周期并将其分配到堆栈上,除非它必须越过Objective-C边界(或者太大而无法在堆栈上分配)。
我怀疑#2在这两者中要大得多,但两者都可能是重要的贡献者。我相信它不仅仅是这个,但这些是两个非常可能的贡献者。