System 0x2c


メモリ取得


【機能】

 動的メモリを取得します。

【関数】

 int Malloc( int size, void ***addr )
 {
   return trapa_svc( 0x2c, pid, size, addr );
 }

【入力】

 size サイズ(バイト単位) 確保するバイト数
 addr 確保したアドレスを格納する領域 メモリ領域の先頭アドレスを格納する

【出力】

 リターンコード OK 正常終了
+0
+1
+2
+3
addr+00
メモリ領域の先頭アドレスが格納されているテーブルへのポインタ

ERR_PARAM パラメータエラー
ERR_MEMOVER メモリ不足

【解説】

 指定された容量のメモリを割り当て、その先頭アドレスが格納されている、システム内のメモリ管理テーブルへのポインタを返します。

 確保するバイト数が0の場合、パラメータエラーを返します。
 テーブルへのポインタを格納するポインタがNULLの場合、または4バイト境界にない場合は、パラメータエラーを返します。

addr
先頭アドレスが格納されている管理テーブルへのポインタ
メモリ管理テーブル
      →→→→
先頭アドレス
→→→→
実メモリ
        →→→→
 
データ
 
 

【関連項目】

 メモリ解放 メッセージ追加 メッセージ取得

【注意】

 本ファンクションにより返されるポインタは、実メモリのダブルポインタです。実メモリは、BIOSファンクションを呼び出し時に変更されることがあるため、ユーザプログラムではダブルポインタを基点としてアクセスするようにして下さい。

 本ファンクションにより割り当てられるメモリは、0c100000〜0c1fffff番地の1メガバイトのエリアの中から確保します。
 以下のケースでは、システムもこのエリアから動的メモリを確保します。

確保契機

解放契機

確保容量

最大
TCPの接続確率時
TCPの接続切断時
送受信バッファとして各4キロバイト
384キロバイト(48ソケット分)
UDPソケットへのデータ送信時
UDPデータ送信完了時
送信データサイズ
5100バイト
UDPソケットへのデータ受信時
パケット受信完了時
受信データサイズ
957キロバイト
システムプロセスからメッセージを発行する場合で、パラメータサイズが4バイトを超える時
メッセージ受信側で解放した時
通過するデータのサイズ
1メッセージあたり64キロバイト

 動的に確保したメモリは、メッセージで他のプロセスに渡した場合を除き、確保したプロセスで解放して下さい。