修正日: 07/10/23  
 MallocDebug   
 Performance Tools入門 その1
4. ブラウザを操作する
ブラウザの表示内容を変更したり、操作したりする方法を簡単に紹介します。(1) All Allocationsポップアップボタン
 このポップアップボタンでブラウザに表示するデータの種類を選択します(図3)。
【図3】 All Allocationsポップアップ

・All Allocations
 現在保持しているすべてのメモリブロックを表示します。既に解放されたメモリは表示しません。
・Allocations from mark
 Markボタンを押された後に確保されたメモリのみを表示します。例えば起動が終わってMarkボタンを押し、何らかの処理を行います。処理が完了して「Allocations from mark」を選択すると、起動時に確保されたメモリは表示されず、その処理内で新たに確保されたメモリブロック(解放されていないもの)のみが一覧で表示されます。
・Leaks
 リークしていると考えられるメモリブロックを表示します。 →4項
・Over/underruns
 バッファオーバーラン/アンダーランが発生したと考えられるメモリブロックを表示します。 →6項
(2) Standardポップアップボタン
 このポップアップボタンでブラウザ内でのツリーの表示形式を変えることができます(図4)。
【図4】 Standardポップアップ

・Standard
 関数呼出しのツリーを上から下へ表示します
・Flat
 ブラウザの1カラム目に全関数を表示します
・Inverted
 関数呼出しのツリーを下から上へ(実際のメモリ割当関数からそれを呼び出した関数へ)表示します
(3) Size In:ポップアップボタン
 ブラウザ右上のポップアップでブラウザ各カラムの左側のメモリの表示方法を変更できます(図5)。またポップアップメニュー下には現在ブラウザで表示しているメモリブロックの数とバイト数が表示されます。(All Allocationsであればすべてのメモリの量、Leaksであればリークしているメモリの量)
【図5】 Size In:ポップアップ

・Bytes
 割り当てられているメモリのバイト数を表示します
・Count
 割り当てられているメモリのブロック数を表示します
(4) パスの移動
 Edit→Decendでブラウザ内のパスの移動を行うことができます(図6)。いちいちキーボードを叩いたり、マウスで選択したりしなくても、一気に分岐点あるいは一番下まで移動することができます。
【図6】 Descendメニュー

・Max Path
 最もメモリサイズの大きいパスを一番下まで移動
・Unique Path
 パスがいくつかに分岐しているところまで移動
(5) Prune
 既知の(問題の無い)関数をブラウザに表示しないようにします(図7)。例えば起動時のNibファイルの読み込みに関する関数は最適化するメリットがあまり無いためPruneで表示しないようにしておくと、自前の関数の最適化に集中することができます。
【図7】 Pruneメニュー

・Selection
 選択中の関数が割り当てたアプリケーション内全てのメモリを除外
・Path
 選択中のパスの関数が割り当てたメモリを除外
・Not in this library
 選択中の関数のライブラリ以外のライブラリで確保されたメモリを除外
・Zone
 ゾーンインスペクタ( →5項)で選択中のゾーンに割り当てられているメモリを全て除外
・Unprune
 全てのデータを表示する
(6) メモリブロックテーブル
 実際にメモリを割り当てている関数を選択すると、ブラウザの下に割り当てられたメモリブロックの一覧が表示されます(図8)。各行をダブルクリックするとメモリインスペクタウィンドウで、各ブロックのバイナリデータを表示することができます。→5項
【図8】 メモリブロックテーブル

・Status
 メモリブロックの状態を表示します。バッファオーバーランの時は「>」がバッファアンダーランの場合は「<」が表示されます。 →7項
・Address
 メモリブロックのアドレスを表示します。
・Size
 メモリブロックのサイズを表示します。
・Zone
 メモリが割り当てられているZoneの名前を表示します。
(7) Sorted By:ポップアップボタン
 メモリブロックテーブルの行の並び順を変更します(図9)。
【図9】 Sorted By:ポップアップ

・Size
 ブロックのサイズ順
・Time
 ブロックが割り当てられた時間順
・Zone
 ブロックが割り当てられているゾーンの名前順