Aracılığıyla paylaş


RpcSs Bellek Yönetim Paketi

Uygulama adına bellek ayrılırken saplamalar ve çalışma süresi tarafından kullanılan varsayılan ayırıcı/serbest ayırıcı çifti midl_user_allocate/midl_user_free. Ancak, [enable_allocate]ACF özniteliğini kullanarak varsayılan yerine RpcSs paketini seçebilirsiniz. RpcSs paketi, RpcSs veya RpcSm ön eki ile başlayan RPC işlevlerinden oluşur. Windows uygulamaları için RpcSs paketi önerilmez.

Not

Rpcss Bellek Yönetim Paketi kullanımdan kaldırıldı. Yerine midl_user_allocate ve midl_user_free kullanılması önerilir.

 

/osf modunda RpcSs paketi, tam işaretçiler kullanıldığında, bağımsız değişkenler bellek ayırma gerektirdiğinde veya [enable_allocate] özniteliği kullanıldığında MIDL tarafından oluşturulan saplamalar için otomatik olarak etkinleştirilir. Varsayılan (Microsoft genişletilmiş) modunda RpcSs paketi yalnızca [enable_allocate] özniteliği kullanıldığında etkinleştirilir. [enable_allocate] özniteliği, sunucu tarafı saptamaları tarafından RpcSs ortamını etkinleştirir. İstemci tarafı, RpcSs paketinin etkinleştirilme olasılığı konusunda uyarılır. /osf modunda istemci tarafı etkilenmez.

RpcSs paketi etkinleştirildiğinde, sunucu tarafındaki belleğin ayrılması özel RpcSs bellek yönetimi ayırıcısı ve serbest bırakıcı çifti ile gerçekleştirilir. RpcSmAllocate (veya rpcSsAllocate)çağırarak aynı mekanizmayı kullanarak bellek ayırabilirsiniz. Sunucu saplamasından geri dönüldükten sonra RpcSs paketi tarafından ayrılan tüm bellek otomatik olarak boşaltılır. Aşağıdaki örnekte RpcSs paketinin nasıl etkinleştirileceği gösterilmektedir:

/* 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 */

Uygulamanız rpcSsFreeveya rpcSmFreeişleviniçağırarak açıkça bellek boşaltabilir. Bu işlevlerin bellek boşaltmadığını unutmayın. Silinmek üzere işaretlerler. Programınız rpcSsDisableAllocateveya RpcSsDisableAllocateçağırdığında RPC kitaplığı belleği serbest bırakır.

Ayrıca RpcSmEnableAllocate yordamını çağırarak uygulamanız için bellek yönetimi ortamını etkinleştirebilirsiniz (ve RpcSmDisableAllocate yordamını çağırarak bunu devre dışı bırakabilirsiniz). Etkinleştirildikten sonra, uygulama kodu RpcSs paketinden işlevleri çağırarak belleği ayırabilir ve serbest bırakabilir.