次の方法で共有


RPC メモリ管理の概要

RPC のコンテキストでは、メモリ管理には次が含まれます。

  • クライアントとサーバーのスレッドの異なるアドレス空間内のクライアントとサーバーの間の 1 つの概念的なアドレス空間をシミュレートするために必要なメモリの割り当てと割り当てを解除します。
  • メモリの管理を担当するソフトウェア コンポーネント (アプリケーションまたは MIDL によって生成されたスタブ) を決定します。
  • メモリ管理に影響する MIDL 属性の選択: 方向属性、ポインター属性、配列属性、および ACF 属性 [ byte_count]、[ 割り当て]、および [ enable_allocate]。

プログラムがアドレス空間で関数またはプロシージャを呼び出す場合、メモリ管理は分散アプリケーションよりも簡単です。 次の図は、バイナリ ツリーを示しています。 このデータ構造をアドレス空間内のプロシージャに渡すには、プログラムは単にツリーのルートへのポインターを渡します。

ツリーのルートに格納されている構造データへのポインターを含むバイナリ ツリー

クライアント/サーバー RPC アプリケーションは、2 つの異なるメモリ空間間でデータを共有します。 これらのメモリ空間は、同じコンピューター上にある場合とそうでない場合があります。 どちらの方法でも、クライアントとサーバーは互いのメモリ領域に直接アクセスできなくなります。 RPC は、サーバー プログラムのアドレス空間内のクライアント プログラムのアドレス空間をシミュレートする機能によって異なります。 また、新しいデータや変更されたデータを含むデータをサーバーからクライアント メモリに返す必要もあります。

前の図に示したバイナリ ツリーなどの場合、ルート ノードへのポインターをリモート プロシージャに渡すだけでは不十分です。 プログラムまたはスタブは、リモート・プロシージャーが操作できるように、ツリー全体をサーバーのアドレス・スペースに渡す必要があります。