ToolTalk サービスでは、ToolTalk API 割り当てスタック内の情報の記憶領域を管理するために、表 13-1 に示した呼び出しを提供しています。
表 13-1 ToolTalk 記憶領域の管理
返される型 |
ToolTalk 関数 |
説明 |
---|---|---|
int |
tt_mark(void) |
一連の関数が返す情報にマークを付ける |
void |
tt_release(int mark) |
一連の関数が返す情報を解放する |
caddr_t |
tt_malloc(size_t s) |
ユーザー用に、割り当てスタック内に指定された量の記憶領域を確保する |
void |
tt_free(caddr_t p) |
tt_malloc が確保した記憶領域を解放する。この関数は、ToolTalk API が返したアドレスを使用し、関連付けられた記憶領域を解放する |
tt_mark() 関数と tt_release() 関数は、情報の記憶領域を管理しやすくするための一般的な機構です。tt_mark() 関数と tt_release() 関数は、通常、ルーチンが終了して ToolTalk サービスによって返された情報が必要なくなった場合に、ルーチンの開始と終了時に使用されます。
ToolTalk サービスに記憶領域の開始をマークするよう要求するには、tt_mark を使用します。ToolTalk サービスは、API スタック上の場所を表す整数のマークを 1 つ返します。ToolTalk サービスがそれ以降に返す情報はすべて、そのマークの後ろに格納されます。
記憶領域に格納されている情報が不要になった場合は、tt_release() を使用して、不要になった情報の開始位置を示すマークを指定します。
例 13-1 は、メッセージ内の情報を検査するルーチンの開始位置で tt_mark() を呼び出します。このルーチン内で検査された情報が不要になってメッセージが破棄されたとき、tt_release() がそのマークとともに呼び出され、スタック上の記憶領域を解放します。
tt_malloc() 関数と tt_free() 関数は、割り当てられた記憶領域割り当てを管理しやすくするための一般的な機構です。
tt_malloc() は、使用する割り当てスタック内に指定された量の記憶領域を確保します。たとえば、tt_malloc() を使用して、記憶領域の場所を作成し、デフォルトセッションの sessid をそこにコピーできます。
ToolTalk サービスがポインタを与える個々のオブジェクトの記憶領域を解放するには、tt_free() を使用します。たとえば、sessid を検査した後で sessid を格納する API 割り当てスタック内の容量を解放できます。tt_free() は、割り当てスタック内のアドレス (tt_malloc() から返された char * ポインタまたはアドレス) を引数としてとります。