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