Pakiet zarządzania pamięcią RpcSs
Domyślna para alokatora/przydziału używana przez wycinki i czas wykonywania podczas przydzielania pamięci w imieniu aplikacji jest midl_user_allocate/midl_user_free. Można jednak wybrać pakiet RpcSs zamiast domyślnego przy użyciu atrybutu ACF [enable_allocate]. Pakiet RpcSs składa się z funkcji RPC, które zaczynają się od prefiksu RpcSs lub RpcSm. Pakiet RpcSs nie jest zalecany w przypadku aplikacji systemu Windows.
Nuta
Pakiet zarządzania pamięcią rpcss jest przestarzały. Zaleca się stosowanie midl_user_allocate i midl_user_free.
W trybie /osf pakiet RpcSs jest włączony automatycznie dla wycinków generowanych w formacie MIDL, gdy są używane pełne wskaźniki, gdy argumenty wymagają alokacji pamięci lub w wyniku używania atrybutu [enable_allocate]. W trybie domyślnym (rozszerzonym przez firmę Microsoft) pakiet RpcSs jest włączony tylko wtedy, gdy jest używany atrybut [enable_allocate]. Atrybut [enable_allocate] umożliwia środowisko RpcSs przez wycinki po stronie serwera. Strona klienta staje się powiadamiana o możliwości włączenia pakietu RpcSs. W trybie /osf stronie klienta nie ma to wpływu.
Po włączeniu pakietu RpcSs alokacja pamięci po stronie serwera odbywa się za pomocą prywatnej pary alokatora i przydziału pamięci RpcSs. Pamięć można przydzielić przy użyciu tego samego mechanizmu, wywołując RpcSmAllocate (lub RpcSsAllocate). Po powrocie z wycinku serwera wszystkie pamięci przydzielone przez pakiet RpcSs są automatycznie zwalniane. W poniższym przykładzie pokazano, jak włączyć pakiet 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 */
Aplikacja może jawnie zwolnić pamięć, wywołując funkcję RpcSsFree lub RpcSmFree. Należy pamiętać, że te funkcje nie mają faktycznie wolnej pamięci. Oznaczają je do usunięcia. Biblioteka RPC zwalnia pamięć, gdy program wywołuje RpcSsDisableAllocate lub RpcSsDisableAllocate.
Możesz również włączyć środowisko zarządzania pamięcią dla aplikacji, wywołując procedurę RpcSmEnableAllocate (i można ją wyłączyć, wywołując procedurę RpcSmDisableAllocate). Po włączeniu kod aplikacji może przydzielić i cofnąć przydział pamięci, wywołując funkcje z pakietu RpcSs.