GCCマニュアルには次のように書かれています。
-fobjc-direct-dispatch
メッセージディスパッチャへの高速ジャンプを許可します。ダーウィンでは、これは通信ページを介して行われます。
このフラグが動的ディスパッチを排除すると想定できますか?それはどのように機能しますか?直接リンクされている場合は、C関数呼び出しと同じくらい高速である必要があると思います。
GCCマニュアルには次のように書かれています。
-fobjc-direct-dispatch
メッセージディスパッチャへの高速ジャンプを許可します。ダーウィンでは、これは通信ページを介して行われます。
このフラグが動的ディスパッチを排除すると想定できますか?それはどのように機能しますか?直接リンクされている場合は、C関数呼び出しと同じくらい高速である必要があると思います。
いいえ、動的ディスパッチはまだ存在します(呼び出しは引き続きルーティングされますobjc_msgSend
)。また、このオプションでは、現在x86(-64)との違いはありません。
objc_msgSend
Objective-Cプログラムによって非常に頻繁に呼び出される一部の関数(など)の場合bla
、パフォーマンスを向上させるために直接(たとえば、PowerPCの ""命令を介して)ジャンプできる特別なエントリポイントがハイメモリに存在します。このfobjc-direct-dispatch
オプションにより、そのようなジャンプが生成されます。このオプションは、NeXTランタイムと組み合わせた場合にのみ使用できます。さらに、この-fobjc-direct-dispatch
オプションでビルドされたプログラムは、Mac OS X 10.4(Tiger)以降のシステムでのみ実行されます。