Поделиться через


Общие сведения об управлении памятью RPC

В контексте RPC управление памятью включает:

  • Выделение и освобождение памяти, необходимой для имитации единого концептуального адресного пространства между клиентом и сервером в разных адресных пространствах клиента и потоков сервера.
  • Определение того, какой программный компонент отвечает за управление памятью — приложение или заглушка, созданная MIDL.
  • Выбор атрибутов MIDL, влияющих на управление памятью: атрибуты направления, атрибуты указателя, атрибуты массива и атрибуты ACF [ byte_count], [ выделение] и [ enable_allocate].

Когда программа вызывает функцию или процедуру в своем адресном пространстве, управление памятью выполняется проще, чем в распределенном приложении. Чтобы проиллюстрировать, на следующей схеме показано двоичное дерево. Чтобы передать эту структуру данных процедуре в ее адресном пространстве, программа просто передает указатель на корень дерева.

двоичное дерево с указателями на структуру данных, размещенных в корне дерева;

Клиентские и серверные приложения RPC совместно используют данные в двух разных пространствах памяти. Эти пространства памяти могут находиться или не находиться на одном компьютере. В любом случае клиент и сервер не имеют прямого доступа к памяти друг друга. RPC зависит от способности моделировать адресное пространство клиентской программы в адресном пространстве серверной программы. Он также должен возвращать данные, включая новые и измененные данные, с сервера в память клиента.

В таких случаях, как двоичное дерево, показанное на предыдущей схеме, недостаточно передать указатель на корневой узел в удаленную процедуру. Программа или заглушка должны передать все дерево в адресное пространство сервера, чтобы удаленная процедура работала с ним.