RpcSs 메모리 관리 패키지

애플리케이션을 대신하여 메모리를 할당할 때 스텁 및 런타임에서 사용하는 기본 할당자/할당 취소자 쌍은 midl_user_free midl_user_allocate/. 그러나 ACF 특성 [enable_allocate]을 사용하여 기본값 대신 RpcSs 패키지를 선택할 수 있습니다. RpcSs 패키지는 접두사 RpcSs 또는 RpcSm 으로 시작하는 RPC 함수로 구성됩니다. Windows 애플리케이션에는 RpcSs 패키지가 권장되지 않습니다.

참고

Rpcss 메모리 관리 패키지는 사용되지 않습니다. midl_user_allocatemidl_user_free 대신 사용하는 것이 좋습니다.

 

/osf 모드에서는 전체 포인터를 사용할 때, 인수에 메모리 할당이 필요한 경우 또는 [enable_allocate] 특성을 사용한 결과로 MIDL에서 생성된 스텁에 RpcSs 패키지가 자동으로 사용하도록 설정됩니다. 기본(Microsoft 확장) 모드에서 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 패키지에서 함수를 호출하여 메모리를 할당 및 할당 취소할 수 있습니다.