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.
[ único , ] o [ ptr, out] puntero No permitido por MIDL.
No de nivel superior [único, en, out] o [ptr, in, out] puntero que cambia de null a no NULL Los códigos auxiliares de cliente asignan nueva memoria en el cliente a cambio.
No de nivel superior [único, en, ] puntero que cambia de no null a null La memoria está huérfana en el cliente; la aplicación cliente es responsable de liberar memoria y evitar pérdidas.
Sin nivel superior [ptr, en, ] puntero que cambia de distinto de null a null La memoria quedará huérfana en el cliente si no se aplica un alias; la aplicación cliente es responsable de liberar y evitar pérdidas de memoria en este caso.
[ref] punteros Normalmente, la capa de aplicación cliente asigna.
No null [en, ] puntero Los códigos auxiliares intentan escribir en el almacenamiento existente en el cliente. Si [cadena] y el tamaño aumenta 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 de cliente Problemas del servidor
[ asignar(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) datos [in] y [in,out].
[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.
[ en]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. [puntero de solo ]-only debe ser [ref] puntero; asignados en el servidor por códigos auxiliares.
[ ref] atributo 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único ] No 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).
[ ptr] atributo (Consulte [ único].) (Consulte [ único].)