语言速度c vs目标c



我一直在想,c的运行速度比objective c快多少?据我所知,c跑得更快。我最近在我的应用程序中实现了一个数学函数(用标准c语言编写),希望它能提高速度,但它真的有那么大的效果吗?

欢呼GC

正如其他人所说,算法比语言更重要。话虽如此,毫无疑问,有时您必须优化对速度敏感的代码。每个Objective-C方法调用都比普通的C函数调用需要更多的指令。在紧凑的游戏循环中分配对象通常也是个糟糕的主意,iOS和Mac OS X调用都倾向于分配大量对象。

在过去,即使是c++方法调用在紧密循环中也会太慢,而c++方法调用通常比Objective-C更快。在现代机器上,你不会看到这些问题,但它们仍然存在。核心音频过滤器就是一个很好的例子,由于速度问题,它需要用纯C而不是Objective-C编写代码。

我的建议是使用Objective-C编写代码,然后运行它,看看它是否太慢了。如果是这样,运行Instruments,看看你在哪里花费了大部分时间。然后使用普通的C、c++甚至汇编语言来优化代码(好吧,关于汇编语言只是开玩笑,除非你真的在挑战极限)。

如果您发现循环中的方法调用开销降低了您的速度,您可以通过使用普通C函数调用、内联例程、展开循环或使用IMP指针来优化它,以避免方法查找开销。

如果你发现你复制了太多的数据,你可以通过共享缓冲区来优化,而不是复制它们,或者使用[NSData dataWithBytesNoCopy]而不是[NSData dataWithBytes]等。

有时候你可以优化你的图形,让它们画得更快——删除不需要的透明部分。不要使用图层阴影或模糊。所有新的mac和许多iOS设备都有两个或更多的CPU核心,所以也许你可以使用线程将一些处理任务转移到第二个核心。这样的例子不胜枚举。

因此,首先使用Objective-C编写应用程序,使用合理的算法,然后在发现问题所在时进行优化。不要做任何太愚蠢的事情,比如在一个紧密循环中对一个大数组循环n^2次,你可能会对90%的代码没有问题。

任何编译成本机代码的语言,对于任何给定的任务,都会为处理器产生大致相同的指令。语言本身并不意味着任何速度提升。认为汇编语言比C语言快是一个普遍的误解;C比c++/Objective-C/等等。

这都归结为你如何设计你的算法。当然,任何规则都有例外。

在性能上应该没有明显的区别,特别是对于你所描述的代码类型,它本质上是由Objective-C编译器编译的C代码。

它确实归结为算法,但在汇编中可以做C语言通常不能做的事情。这包括组织程序的某些调用,以便不需要对堆栈进行推送和拉取操作。

如果你需要除以2,例如,对于一个给定的任务,在汇编中你可以简单地做一个寄存器移位(或几个移位,如果它是一个大数字)。C通常需要调用、推入和拉入堆栈,仅开销就会使它慢得多。

所以,是的,以上是技术上的算法差异,但汇编编程允许你这样做。然后将上面的想法应用到一组数学函数中,速度差异就显而易见了。为了尽量减少对C的影响,显然是将新的汇编代码放入C的库中。与直接汇编相比,您仍然会有开销,但这样您也可以获得最佳算法,并具有更高级别语言的更高生产力。

相关内容

最新更新