Objective C足够快,可用于DSP /音频编程

mor*_*des 8 iphone audio performance objective-c

我在iPhone的音频编程方面取得了一些进展.现在我正在做一些性能调整,试图看看我是否可以从这台小机器中挤出更多.运行鲨鱼,我发现我的cpu功率的很大一部分(16%)被objc_msgSend吃掉了.我知道我可以通过存储指向函数(IMP)的指针而不是使用[object message]表示法调用它来加快速度.但如果我要解决所有这些麻烦,我想知道我是否可以更好地使用C++.

有什么想法吗?

Ste*_*non 13

Objective C对于DSP /音频编程来说绝对够快,因为Objective C是C的超集.您不需要(也不应该)将所有内容都作为消息.在性能至关重要的地方,使用普通的C函数调用(或使用内联汇编,如果有硬件功能可以利用这种方式).如果性能不重要,并且您的应用程序可以从消息间接的功能中受益,请使用方括号.

例如,OS X上的Accelerate框架是一个出色的高性能Objective C库.它只使用标准的C99函数调用,你可以从Objective C代码调用它们而不需要任何包装或间接.

  • @morgancodes:在我遇到的大多数高性能代码中,模块化发生在相对较高的级别,而不是在每个函数调用的级别.使用Objective-C消息调度来获取高级模块化可插入组件并没有什么能阻止你使用C语言低级实现使用C函数调用.如果在你的情况下真的不可能,但是C++虚函数查找开销*在某种程度上是可以接受的,那么我想你应该使用C++.然而,这似乎是一个相当狭窄的情况. (6认同)

Tec*_*Zen 4

Objective-C 和 DSP 等功能的问题不是速度本身,而是不可避免的瓶颈何时出现的不确定性。

所有语言都有瓶颈,但在 C++ 等静态链接语言中,您可以更好地预测瓶颈在代码中何时何地发生。在 Objective-C 的运行时耦合的情况下,找到合适的对象所花费的时间、发送消息所花费的时间不一定很慢,而是可变且不可预测的。Objective-C 在 UI、数据管理和重用方面的灵活性在时间紧迫的任务中会产生不利影响。

Apple API 中的大多数音频处理都是用 C 或 C++ 完成的,因为需要确定代码执行所需的时间。然而,在同一个应用程序中混合 Objective-C、C 和 C++ 很容易。这使您可以为当前的任务选择最佳语言。