3

GCCマニュアルには次のように書かれています。

-fobjc-direct-dispatch

メッセージディスパッチャへの高速ジャンプを許可します。ダーウィンでは、これは通信ページを介して行われます。

このフラグが動的ディスパッチを排除すると想定できますか?それはどのように機能しますか?直接リンクされている場合は、C関数呼び出しと同じくらい高速である必要があると思います。

4

1 に答える 1

4

いいえ、動的ディスパッチはまだ存在します(呼び出しは引き続きルーティングされますobjc_msgSend)。また、このオプションでは、現在x86(-64)との違いはありません。

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

objc_msgSendObjective-Cプログラムによって非常に頻繁に呼び出される一部の関数(など)の場合bla、パフォーマンスを向上させるために直接(たとえば、PowerPCの ""命令を介して)ジャンプできる特別なエントリポイントがハイメモリに存在します。このfobjc-direct-dispatchオプションにより、そのようなジャンプが生成されます。このオプションは、NeXTランタイムと組み合わせた場合にのみ使用できます。さらに、この-fobjc-direct-dispatchオプションでビルドされたプログラムは、Mac OS X 10.4(Tiger)以降のシステムでのみ実行されます。

于 2010-05-08T14:43:13.183 に答える