GCC手册说:
-fobjc-direct-dispatch
允许快速跳转到消息调度程序。上 达尔文这是通过通讯页面完成的。
我可以假设这个标志消除了动态调度吗?它是如何工作的? 我相信它应该像C函数调用一样快,如果它是直接链接的。
答案 0 :(得分:4)
不,动态调度仍然存在(呼叫仍然通过objc_msgSend
路由)。此选项目前与x86(-64)没有任何区别。
对于Objective-C程序经常调用的某些函数(例如
objc_msgSend
),高内存中存在可以直接跳转到的特殊入口点(例如,通过“bla
”指令在PowerPC上)以提高性能。fobjc-direct-dispatch
选项将导致生成此类跳转。此选项仅与NeXT运行时一起使用;此外,使用-fobjc-direct-dispatch
选项构建的程序只能在Mac OS X 10.4(Tiger)或更高版本的系统上运行。