Paquete de administración de memoria rpcSs
El par de asignadores o desasignadores predeterminados que usan los códigos auxiliares y el tiempo de ejecución al asignar memoria en nombre de la aplicación se midl_user_allocate/midl_user_free. Sin embargo, puede elegir el paquete RpcSs en lugar del valor predeterminado mediante el atributo ACF [enable_allocate]. El paquete RpcSs consta de funciones RPC que comienzan con el prefijo RpcSs o RpcSm. El paquete RpcSs no se recomienda para las aplicaciones de Windows.
Nota
El paquete de administración de memoria rpcss está obsoleto. Se recomienda usar midl_user_allocate y midl_user_free en su lugar.
En el modo /osf, el paquete RpcSs está habilitado para códigos auxiliares generados por MIDL automáticamente cuando se usan punteros completos, cuando los argumentos requieren asignación de memoria o como resultado del uso del atributo [enable_allocate]. En el modo predeterminado (extendido de Microsoft), el paquete RpcSs solo se habilita cuando se usa el atributo [enable_allocate]. El atributo [enable_allocate] habilita el entorno rpcSs por los códigos auxiliares del lado servidor. El lado cliente se alerta a la posibilidad de que se pueda habilitar el paquete RpcSs. En el modo /osf , el lado cliente no se ve afectado.
Cuando el paquete RpcSs está habilitado, la asignación de memoria en el lado servidor se realiza con el asignador de administración de memoria rpcSs privado y el par de desasignadores. Puede asignar memoria mediante el mismo mecanismo llamando a RpcSmAllocate (o RpcSsAllocate). Tras la devolución del código auxiliar del servidor, se libera automáticamente toda la memoria asignada por el paquete RpcSs. En el ejemplo siguiente se muestra cómo habilitar el paquete 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 */
La aplicación puede liberar memoria explícitamente invocando la función RpcSsFree o RpcSmFree . Tenga en cuenta que estas funciones no liberan realmente memoria. Lo marcan para su eliminación. La biblioteca RPC libera la memoria cuando el programa llama a RpcSsDisableAllocate o RpcSsDisableAllocate.
También puede habilitar el entorno de administración de memoria para la aplicación llamando a la rutina RpcSmEnableAllocate (y puede deshabilitarlo llamando a la rutina RpcSmDisableAllocate ). Una vez habilitado, el código de aplicación puede asignar y desasignar memoria llamando a funciones desde el paquete RpcSs.