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].) |