Considere este caso:¿Se produce una fuga de memoria en la descarga de una DLL en el proceso de host?
dll = LoadDLL()
dll->do()
...
void do() {
char *a = malloc(1024);
}
...
UnloadDLL(dll);
En este punto, será el asignado 1k en la llamada a malloc() estará disponible para el proceso de host de nuevo? El archivo DLL está vinculando estáticamente al CRT.
¡Gracias! ¿Podría explicar cómo/cuándo el CRT desasigna su almacenamiento de almacenamiento dinámico? ¿Se agrega esto como un tipo de código de salida dll predeterminado por el compilador/vinculador? – Viktor
ADVERTENCIA: ¡Depende de la implementación! Un CRT puede simplemente proporcionar acceso al almacenamiento dinámico del sistema operativo para un proceso, en cuyo caso usted * puede * asignar en un archivo DLL y libre al exterior. – MSalters
Se llamará a DllMain en la salida.Espero que los recuentos de referencia hasta que el dll esté completamente descargado, y luego elimine el montón. MSalters tiene razón, por ejemplo, puede asignar en cualquier lugar y liberar en cualquier lugar, pero si su aplicación se bloquea, se pierde la memoria que nada menos que un reinicio puede liberar (por ejemplo, Win3.1 montón global) – gbjbaanb