RPC 内存管理简介

在 RPC 上下文中,内存管理涉及:

  • 分配和解除分配在客户端和服务器线程的不同地址空间中模拟客户端和服务器之间的单个概念地址空间所需的内存。
  • 确定哪个软件组件负责管理内存 - 应用程序或 MIDL 生成的存根。
  • 选择影响内存管理的 MIDL 属性:方向属性、指针属性、数组属性和 ACF 属性 [ byte_count]、[ allocate] 和 [ enable_allocate]。

当程序在其地址空间中调用函数或过程时,内存管理比在分布式应用程序中更简单。 为了说明,下图描绘了一个二叉树。 若要将此数据结构传递到其地址空间中的过程,程序只需将指针传递到树的根。

二叉树,指向结构数据的指针位于树根

客户端/服务器 RPC 应用程序跨两个不同的内存空间共享数据。 这些内存空间可能位于同一台计算机上,也可能不在同一台计算机上。 无论采用哪种方式,客户端和服务器都无法直接访问彼此的内存空间。 RPC 取决于在服务器程序的地址空间中模拟客户端程序的地址空间的能力。 它还必须将服务器中的数据(包括新数据和更改的数据)返回到客户端内存。

在上图中描述的二进制树等情况下,将指向根节点的指针传递给远程过程是不够的。 程序或存根必须将整个树传递到服务器的地址空间,远程过程才能对其进行操作。