G77 versione 3.2 crea un file di oggetti di grandi dimensioni con l'opzione -finit-local-zero

StackOverflow https://stackoverflow.com/questions/8948990

Domanda

Sto lavorando con un codice fortran-77 numerico + accademico + accademico + che richiede G77 3.2.x per compilare ed eseguire correttamente ... Sto usando quel compilatore su Red Hat Linux 9 per i386

Uno di quei file FORTRAN-77 definisce una subroutine con molti array reali, interi e doppia di precisione come variabili locali ... se la compilo usando:

$ g77 -c thefile.F -o thefile.o

Produce un file oggetto di dimensioni intorno a 10kb ... ma quanto segue:

$ g77 -finit-local-zero -c thefile.F -o thefile.o

produce un file oggetto di dimensioni 14 MB

Provai strip'ing il file oggetto ma la dimensione non cambia molto

Una dozzina di file di questo tipo nel codice e il binario eseguibile finisce per essere di 200 MB di dimensioni

Qualche idea su cosa sta succedendo? ma ancora più importante Cosa posso fare per tornare alle dimensioni di oggetti/binarie più sani?

PS: Quando ho compresso il binario da 200 MB in Tar.GZ, il tarball era inferiore a 1 MB ... significa che probabilmente i 200 MB sono pieni di 0 o qualcosa del genere (potrei aprirlo in un editore esadecimale ma mi sento troppo pigro bene adesso)

PS: i dettagli del compilatore sono riportati di seguito (usando il flag -v di G77)

$ g77 -v -finit-local-zero -c thefile.F -o thefile.o
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --host=i386-redhat-linux
Thread model: posix
gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)
 /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/tradcpp0 -lang-fortran -v -D__GNUC__=3 -D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=2 -D__GXX_ABI_VERSION=102 -D__ELF__ -Dunix -D__gnu_linux__ -Dlinux -D__ELF__ -D__unix__ -D__gnu_linux__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__NO_INLINE__ -D__STDC_HOSTED__=1 -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i386__ thefile.F /tmp/ccXXvzMA.f
GNU traditional CPP version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)
 /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/f771 /tmp/ccXXvzMA.f -quiet -dumpbase thefile.F -version -finit-local-zero -o /tmp/cck0Blw1.s
GNU F77 version 3.2.2 20030222 (Red Hat Linux 3.2.2-5) (i386-redhat-linux)
    compiled by GNU C version 3.2.2 20030222 (Red Hat Linux 3.2.2-5).
 as -V -Qy -o thefile.o /tmp/cck0Blw1.s
GNU assembler version 2.13.90.0.18 (i386-redhat-linux) using BFD version 2.13.90.0.18 20030206

Modifica: le versioni più recenti G77/GFortran non hanno questo problema (la dimensione del file oggetto rimane quasi la stessa con -finit-local-zero) ma non posso usarle (rendere il codice produrre risultati corretti con le versioni del compilatore più recenti Progetto in sé) ... e ho bisogno del flag -finit-local-zero (il codice si blocca senza di essa)

EDIT 2: ho preso un dump esadecimale e abbastanza sicuro il 99% del file è composto da zeri!

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top