GCC -fobjc-direct-dispatch选项究竟做了什么?

时间:2010-05-08 14:34:08

标签: objective-c gcc compiler-flags

GCC手册说:

-fobjc-direct-dispatch
     

允许快速跳转到消息调度程序。上   达尔文这是通过通讯页面完成的。

我可以假设这个标志消除了动态调度吗?它是如何工作的? 我相信它应该像C函数调用一样快,如果它是直接链接的。

1 个答案:

答案 0 :(得分:4)

不,动态调度仍然存在(呼叫仍然通过objc_msgSend路由)。此选项目前与x86(-64)没有任何区别。

来自http://developer.apple.com/legacy/mac/library/documentation/DeveloperTools/gcc-3.3/gcc/Objective_002dC-Dialect-Options.html

  

对于Objective-C程序经常调用的某些函数(例如objc_msgSend),高内存中存在可以直接跳转到的特殊入口点(例如,通过“bla”指令在PowerPC上)以提高性能。 fobjc-direct-dispatch选项将导致生成此类跳转。此选项仅与NeXT运行时一起使用;此外,使用-fobjc-direct-dispatch选项构建的程序只能在Mac OS X 10.4(Tiger)或更高版本的系统上运行。