12.3.2 タイプ設定の変更 |
|
「Memory Map」を調べると,ユーザには無意味なセグメント・タイプ名が見つかる場合があります。このような名前を「Do-not-use Type」リストに追加することで,セグメント名の変更と,必要な場合には「Memory Map」ディスプレイの再生成をヒープ・アナライザに指示します。
省略時の設定では,セグメント・タイプ名はセグメント作成時に割り当てられます。場合によっては要素の名前 ( たとえば,LIBRTL) が割り当てられることもありますが,ほとんどの場合,ヒープ・アナライザは呼び出しスタックを下方向へ検索してルーチン名を探し,そのルーチン名をセグメント・タイプ名として使用します。
アナライザが選択するルーチン名は,呼び出しスタック内にあり,「Do-not-use Type」リストによって禁止されていない最初のルーチン名です。先頭のルーチンが禁止されている場合は,順に次のルーチンを調べていきます。
省略時のこの動作は,「Memory Map」に次の問題を引き起こすことがあります。
- 何種類かの同一のタイプ名が「Memory Map」ディスプレイに繰り返し表示される。
呼び出しスタックの最初のルーチンが,下位レベルのメモリ管理ルーチンまたはユーティリティ・ルーチンである場合に起きる。ユーザ・アプリケーションの割り当てイベントの大部分はこれらのルーチンを使用するので,関連のない割り当てが同じタイプ名で 1 つにグループ化されて表示される。
この問題を防ぐには,ユーザ・アプリケーションを実行する前に,アプリケーション固有のメモリ管理ルーチンまたはユーティリティ・ルーチンの名前を「Do-not-use Type」リストに追加しておく。
- 割り当てられたタイプ名による抽象化レベルが,ユーザに必要なレベルよりも高くなる。
呼び出しスタックの最初のルーチンが,ユーザの調べているレベルほどのアプリケーション・バウンドでない場合に起きる可能性がある。アプリケーションの各関数を反映したタイプ名を見ることが必要な場合は,中間のメモリ管理ルーチンに由来するタイプ名が表示されるとかえって不便になる。
呼び出しスタックの最初のルーチンがユーザ・アプリケーションの一部分を対象にしていて,ユーザがその部分に関心がない場合も,この問題が起きる可能性がある。サブシステムの関数 ( たとえば,initialize_death_star) を反映したタイプ名を見ることが必要な場合,サブシステムの全関数 ( たとえば,initialize_star) が 1 つのタイプ名で表示されては不便になる。
この問題を修正するには,「Memory Map」に反映される抽象化レベルがユーザの希望と一致するまで,現在のタイプ名を「Do-not-use Type」リストに追加していく。
セグメント・タイプ名を「Do-not-use Type」リストに追加するには,プルダウンの「Options」メニューから「Add to Do-not-use Type List」を選択するか,または「Memory Map」,「Type」ヒストグラム,および「Views-and-Types」ディスプレイの各ポップアップ・メニューで「Do Not Use Type」を選択します。「Do-not-use Type」リストからセグメント・タイプを削除するには,「Do-not-use Type」リストのポップアップ・メニューで「Use Type」を選択します。
「Do-not-use Type」リストの内容を保存するには,「Options」メニューで「Save Do-not-use Type」リストを選択します。今後のヒープ・アナライザ・セッション用にリストの内容が保存されます。メニュー項目の「Restore Do-not-use Type」リストを使用すると,リストの最後の保存後の追加分が削除されます。
図 12-9 に,「Add to Do-not-use Type」リスト・ダイアログ・ボックスへの LIBRTL \*\* の入力を示します。このダイアログ・ボックスは「Options」メニューから選択できます。この図には,「Do-not-use Type」リスト内で使用できるマウスとメニューのすべての選択項目を示してあります。
図 12-9 ヒープ・アナライザの「Do-not-use Type」リスト