Пакет управления памятью RpcSs

По умолчанию при выделении памяти от имени приложения используется пара распределитель/освобождение, используемая заглушками и временем выполнения, midl_user_allocate/midl_user_free. Однако можно выбрать пакет RpcSs вместо пакета по умолчанию с помощью атрибута ACF [enable_allocate]. Пакет RpcSs состоит из функций RPC, которые начинаются с префикса RpcSs или RpcSm. Пакет RpcSs не рекомендуется использовать для приложений Windows.

Примечание

Пакет управления памятью Rpcss устарел. Рекомендуется использовать вместо него midl_user_allocate и midl_user_free .

 

В режиме /osf пакет RpcSs включается автоматически для заглушки, созданные MIDL, при использовании полных указателей, когда аргументы требуют выделения памяти или в результате использования атрибута [enable_allocate] . В режиме по умолчанию (microsoft extended) пакет RpcSs включен только при использовании атрибута [enable_allocate] . Атрибут [enable_allocate] включает среду RpcSs с помощью заглушки на стороне сервера. На стороне клиента оповещается о возможности включения пакета RpcSs. В режиме /osf клиентская сторона не затрагивается.

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

/* ACF file fragment */

[ 
    implicit_handle(handle_t GlobalHandle),
    enable_allocate
]
interface iface
{
}

/*Server management routine fragment. Replaces p=midl_user_allocate(size); */

    p=RpcSsAllocate(size);                /*raises exception */
    p=RpcSmAllocate(size, &status);       /*returns error code */

Приложение может явно освободить память, вызвав функцию RpcSsFree или RpcSmFree . Обратите внимание, что эти функции на самом деле не освобождают память. Они помечают его для удаления. Библиотека RPC освобождает память, когда программа вызывает RpcSsDisableAllocate или RpcSsDisableAllocate.

Вы также можете включить среду управления памятью для приложения, вызвав подпрограмму RpcSmEnableAllocate (и отключить ее, вызвав подпрограмму RpcSmDisableAllocate ). После включения кода приложения можно выделять и отменять выделение памяти путем вызова функций из пакета RpcSs.