2010-12-15 6 views
1

私は、iOSアプリケーションでヒープ使用量を測定するためにアロケーション機器を使用します。私は大量のメモリーをタグ名「メモリタグ70」で地域に割り当てられていることがわかり、と私はそのための責任者を知っていただきたいと思いますので、私は追いかけることができます。名前付きOSMallocTagを作成したライブラリを見つけることはできますか?

  • を、それがために適切なのかどうか私はこのメモリについて何かしようとすると
  • もしそうなら、私はそれについて何をすべきか(すなわち、どのコードがその領域にオブジェクトを割り当てるのか)。

したがって、特定の引数を持つOSMalloc_tagAlloc()への呼び出しがどこから来たのかをトレースできますか?私は、デバイスではなく、シミュレータで実行しているときだけそうすることができるということを受け入れるつもりです。しかし、それが事実であっても、私はどのようにそれについて行きますか?もし私がdtrace -c経由でシミュレータで私のアプリを起動することができます私はdtrace私にタグ名を表示することができますか?どうやって?

+1

Hmmm ...「メモリタグ70」は、「エリア51」のiOSに相当します。 –

+0

@GrahamLee:申し訳ありませんが悪いです。それは私の間違いでした。投稿時にはhttp://stackoverflow.com/questions/10025724/nsfilemanager-cant-create-file。ごめんなさい。何も個人:) –

答えて

0

インストゥルメントでは、ウィンドウの上部と下部の間のディバイダにあるポップアップを選択することで、さまざまな表示を切り替えることができます。 "Allocations"では、 "Call Trees"を表示するように切り替えることができます(デフォルトは "Statistics"です)。

これは、すべての割り当てに対してコールスタックを提供するはずです。しかし、カーネルからユーザー空間までずっとトレースするかどうかはわかりません。

0

私にとって、このタグは私が割り当てた大きなUIImagesに関連していました。私はあなたがこれについてより多くの情報を得る方法と、示唆すべき(おそらく)有用なものをいくつか持っています。

あなたが興味を持っているタグは、OSMalloc_tagAlloc()ではなく、vm_allocateなどのflags引数で渡されたものだと思います。 iOS 3.1のリリースノートには、VM計測器に関連して< mach/vm_statistics.h>と< mach/vm_map.h>ヘッダーが記載されています。

このタグは、vm_statistics.hのVM_FLAGS_ALIAS_MASKに続いて#defineのように、vm_allocateフラグパラメータを介して渡されると思います。 (これは、ここでは「エイリアス」と呼ばれています。)つまり、vm_allocateなどを調べてflagsパラメータからタグを抽出するdtraceスクリプトを作成できるはずです。たとえば:

sudo dtrace -n 'fbt:mach_kernel:vm_allocate:entry /pid==12345/ { printf("%d", (arg3 & 0xFF000000) >> 24); }'

あなたが「インストゥルメント」メニューの「...新しいインストゥルメントを構築する」DTraceの楽器を作るとビアのiOSシミュレータに対して実行するために楽器を使用するか、コマンドを使用する使用することができますline dtraceスクリプトを実行し、実行中のアプリケーションに/ pid == 123456/predicateを追加します。

残念ながら、私はこれらの割り当てを見つける正しいプローブを見つけることができませんでした。適切なargN変数を調べると、フラグは常にタグ/ alia部分に0を持つように見えます。例えば、上記のようにfbt:mach_kernel:vm_allocateを試しました。fbt:mach_kernel:mach_vm_allocate、fbt:mach_kernel:vm_map_enterなどおそらくこれらの割り当ては他の手段を使っていますか?私は、カーネルのメモリ割り当てシステムについてあまり知らない。

私はこれらのタグがどこにカーネルに渡されているのか正確にはわかりませんが、これがあなたの追跡に役立つことを願っています。

関連する問題