Compartir a través de


Resumen de las reglas de asignación de memoria

En la tabla siguiente se resumen las reglas clave relativas a la asignación de memoria.

Elemento MIDL Descripción
Punteros de nivel superior [ ref] Debe ser punteros no NULL.
Valor devuelto de la función La nueva memoria siempre se asigna para los valores devueltos del puntero.
[ unique, out] o [ ptr, out] puntero No permitido por MIDL.
Puntero que no es de nivel superior [unique, in, out] o [ptr, in, out] que cambia de null a no null Los códigos auxiliares de cliente asignan memoria nueva en el cliente a cambio.
Puntero que no es de nivel superior [unique, in, out] que cambia de distinto de null a NULL La memoria está huérfana en el cliente; la aplicación cliente es responsable de liberar memoria y evitar fugas.
Puntero que no es de nivel superior [ptr, in, out] que cambia de distinto de null a NULL La memoria será huérfana en el cliente si no tiene alias; la aplicación cliente es responsable de liberar y evitar fugas de memoria en este caso.
Punteros [ref] Normalmente, la capa de aplicación cliente asigna.
Puntero que no es null [in, out] Los códigos auxiliares intentan escribir en el almacenamiento existente en el cliente. Si [cadena] y el tamaño aumentan más allá del tamaño asignado en el cliente, provocará un error de GP en la devolución.

 

En la tabla siguiente se resumen los efectos de los atributos IDL y ACF clave en la administración de memoria.

Característica MIDL Problemas del cliente Problemas del servidor
[ allocate(single_node)], [allocate(all_nodes)] Determina si se realizan una o varias llamadas a las funciones de memoria. Igual que el cliente, excepto la memoria privada, se puede usar a menudo para asignar (single_node) [in] y [in,out] datos.
[allocate(free)] o [allocate(dont_free)] (Ninguno; afecta al servidor). Determina si la memoria del servidor se libera después de cada llamada a procedimiento remoto.
atributos de matriz [ max_is] y [ size_is] (Ninguno; afecta al servidor). Determina el tamaño de la memoria que se va a asignar.
[ byte_count] El cliente debe asignar búfer; no asignado o liberado por códigos auxiliares de cliente. El atributo de parámetro ACF determina el tamaño del búfer asignado en el servidor.
[ enable_allocate] Normalmente, ninguno. Sin embargo, el cliente puede usar un entorno de administración de memoria diferente. El servidor usa un entorno de administración de memoria diferente. RpcSmAllocate debe usarse para las asignaciones.
[ in]attribute Aplicación cliente responsable de asignar memoria para los datos. Asignado en el servidor por códigos auxiliares.
Atributo [ out] Asignado en el cliente por códigos auxiliares. [out]-only puntero debe ser [ref] puntero; asignados en el servidor por códigos auxiliares.
Atributo [ ref] La aplicación cliente debe asignar la memoria a la que hace referencia el puntero. Punteros de referencia de nivel superior y de primer nivel administrados por códigos auxiliares.
Atributo [ unique] Un valor distinto de NULL a NULL puede dar lugar a memoria huérfana; null a no null hace que el código auxiliar del cliente llame a midl_user_allocate. (Afecta al cliente).
Atributo [ ptr] (Consulte [ unique].) (Consulte [ unique].)