3

Cocoa は、Memory Zonesと呼ばれるページ整列メモリ領域を提供し、ゾーンを引数として取るいくつかのメモリ管理関数を提供します。

メモリのブロックを割り当てる必要があると仮定しましょう (オブジェクトではなく、任意のデータに対して)。を呼び出すmalloc(size)と、バッファは常にデフォルト ゾーンに割り当てられます。ただし、誰かがallocWithZone:オブジェクトをデフォルト以外の別のゾーンに割り当てていた可能性があります。NSZoneMalloc([self zone], size)その場合、バッファと所有オブジェクトをメモリの同じ領域に保持するを使用する方がよいようです。

この習慣に従っていますか?メモリゾーンを利用したことがありますか?

更新: スタック オーバーフローでは、低レベルのトピックに関する質問に、時期尚早の最適化に関する講義で答える傾向があると思います。1993 年の NeXT ハードウェアでは、現在よりもゾーンが重要だった可能性が高いことを私は理解しています。とにかく、誰かがメモリゾーンを利用したプロジェクトについて説明できるかどうかを確認したいと思っています.

4

3 に答える 3

1

あなたは質問全体で完全に正しいですが、実際には、実際にゾーンを使用する人は誰もいません。リンク先のページに次のように記載されています。

ほとんどの場合、別のゾーンを作成するよりも、既定のゾーンを使用する方が高速で効率的です。

独自のゾーンを作成する利点は次のとおりです。

オブジェクトの 1 つにアクセスしようとしたときにページ フォールトが発生した場合、そのページを読み込むと、関連するすべてのオブジェクトが読み込まれるため、将来のページ フォールトの数を大幅に減らすことができます。

ページ フォールトが発生した場合は、システムが最近ページ アウトしていたためにシステムが遅くなったことを意味し、アプリが責任を負っていないか、解決策が最初に一度に大量のメモリを割り当てたアプリの一部にあることを意味します。場所。

したがって、基本的には、「パフォーマンスの問題を修正したり、アプリを非常に高速にしたりするために、独自のゾーンを作成する必要があることを本当に証明できるか」という質問があり、答えは「いいえ」です。

于 2009-02-27T02:33:48.477 に答える
0

これを行っていることに気付いた場合は、本来あるべきレベルよりも低いレベルで動作している可能性があります。サブシステムはそれらをほとんど無視します。などを呼び出すと+alloc、オブジェクトがデフォルト ゾーンに取得されます。malloc知ってNSAllocateCollectableおく必要があるのはそれだけです。

于 2009-02-27T02:11:16.283 に答える