ToolTalk ユーザーズガイド

情報の記憶領域管理のための呼び出し

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() がそのマークとともに呼び出され、スタック上の記憶領域を解放します。


例 13–1 記憶領域の情報のマーク付け

 	/*
	 * Get a storage mark so we can easily free all the data
  * ToolTalk returns to us.
	 */

	mark = tt_mark();

	if (0==strcmp(“ttsample1_value”, tt_message_op(msg_in))) {
			tt_message_arg_ival(msg_in, 0, &val_in);
			xv_set(gauge, PANEL_VALUE, val_in, NULL);
 }

	tt_message_destroy(msg_in);
 tt_release(mark);
	return;


記憶領域の割り当てと解放

tt_malloc() 関数と tt_free() 関数は、割り当てられた記憶領域割り当てを管理しやすくするための一般的な機構です。

記憶領域の割り当て

tt_malloc() は、使用する割り当てスタック内に指定された量の記憶領域を確保します。たとえば、tt_malloc() を使用して、記憶領域の場所を作成し、デフォルトセッションの sessid をそこにコピーできます。

割り当て済み記憶領域の解放

ToolTalk サービスがポインタを与える個々のオブジェクトの記憶領域を解放するには、tt_free() を使用します。たとえば、sessid を検査した後で sessid を格納する API 割り当てスタック内の容量を解放できます。tt_free() は、割り当てスタック内のアドレス (tt_malloc() から返された char * ポインタまたはアドレス) を引数としてとります。