Fortran - warning LNK4084

   
Vista:

warning LNK4084

Publicado por Jota (7 intervenciones) el 02/11/2010 13:50:24
Hola:

estoy tratando de compilar un codigo que trabaja con grandes matrices y me da este warnin:
warning LNK4084: total image size 492675072 exceeds max (268435456); image may not run

luego el .exe no va bien.

pudieran ayudarme?

gracias mil
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
información
Otras secciones de LWP con contenido de Fortran
- Código fuente de Fortran
- Cursos de Fortran
- Temas de Fortran
información
Códigos de Fortran
- Ecuaciones lineales

RE:warning LNK4084

Publicado por Capitan Kirk (18 intervenciones) el 03/11/2010 08:38:42
Eso parece un error del linker (enlazador).

Si las matrices las dimensionas estáticamente, es decir, declaras las dimensiones en el momento de la declaración, puede que sea eso lo que te provoque el problema. Hace mucho que no utilizo FORTRAN y no sé cómo organiza la memoria, por lo poco que detallas da la sensación de que el espacio para variables lo reserva dentro de lo que será el espacio de memoria que necesita el ejecutable y que eso te genera el error al pedirle demasiado espacio.

La solución sería asignar la memoria necesaria para esas matrices de forma dinámica (algo parecido a la función malloc del lenguaje C). No sé si los compiladores FORTRAN actuales permiten asignación dinámica de memoria (aunque creo que sí). Comprueba también si hay alguna opción del compilador o del enlazador para indicar la existencia de bloques grandes de memoria.

Otra ¿solución? sería portar la aplicación a otro lenguaje, como C ó C++.

También es conveniente, al postear un problema, indicar el compilador y el sistema operativo que utilizas, esto puede en ocasiones ayudar a precisar mejor la respuesta.

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:warning LNK4084

Publicado por Anel (7 intervenciones) el 03/11/2010 11:16:19
Capitan Kirk,

Utilizo para compilar DIGITAL Visual Fortran sobre windows Xp.

mil gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:warning LNK4084

Publicado por Capitan Kirk (18 intervenciones) el 04/11/2010 10:40:36
Como ya comenté, hace mucho que no utilizo FORTRAN y tampoco he usado ese compilador, así que no te puedo dar pautas muy concretas, sino solamente algunas ideas generales.

Prueba a deshabilitar las opciones de depuración (es decir, indicar que quieres obtener una versión release). La forma de hacerlo depende del entorno de desarrollo, algunos dan directamente la opción de Debug ó Release y en otros hay que hacerlo jugando con las opciones de compilación y enlazado. De este modo, no se añadirá código adicional para comprobar que te mueves dentro de los límites de una matriz, lectura/escritura de zonas de memoria "prohibidas", etc. Esto debería reducir algo el tamaño de tu ejecutable (en ocasiones, la diferencia puede ser significativa).

Si esas matrices que indicas las dimensionas en tiempo de compilación, prueba a ver si reduciendo las dimensiones se reduce el tamaño del ejecutable (es decir, si por ejemplo tienes una matriz A de 100x100, probar a ver qué tamaño de ejecutable te queda cambiando la dimensión a 50x50). No se trata de correr el programa con las nuevas dimensiones, sino solamente de comprobar si varía el tamaño del ejecutable.

Si, haciendo lo anterior, ves que hay una variación notoria en el tamaño del ejecutable final, te tocará utilizar asignación dinámica de memoria. He echado un vistazo a los manuales (pueden verse en Internet, en formato PDF), y puede hacerse.

Otra posibilidad es que tengas muuuuucho código, en ese caso convendría separar el programa en módulos y compilar algunos como DLL (librerías de enlace dinámico), de este modo se cargarían solamente en el caso de ser necesarias. El entorno de desarrollo te dará la opción de generar DLLs (claro está, lo que vayas a compilar como DLL tendrá que ser un proyecto aparte).

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar