Trunced error

di il
20 risposte

Trunced error

Ho un codice dove ho aumentato la dimensione degli array e ora mi dà questo errore:

bash-5.1$ reset && c++  desc.cpp -o desc && ./desc > out.log
/tmp/ccE6rPZI.o: in function `mkcha()':
desc.cpp:(.text+0x15919): relocation truncated to fit: R_X86_64_32S against symbol `graa' defined in .bss section in /tmp/ccE6rPZI.o
desc.cpp:(.text+0x15959): relocation truncated to fit: R_X86_64_32S against symbol `graa' defined in .bss section in /tmp/ccE6rPZI.o
desc.cpp:(.text+0x1599a): relocation truncated to fit: R_X86_64_32S against symbol `whia' defined in .bss section in /tmp/ccE6rPZI.o
desc.cpp:(.text+0x159da): relocation truncated to fit: R_X86_64_32S against symbol `whia' defined in .bss section in /tmp/ccE6rPZI.o
/tmp/ccE6rPZI.o: in function `copsh(int (*) [500][500], int, int)':
desc.cpp:(.text+0x535c1): relocation truncated to fit: R_X86_64_32S against symbol `muls' defined in .bss section in /tmp/ccE6rPZI.o
/tmp/ccE6rPZI.o: in function `mkspec(int, int)':
desc.cpp:(.text+0x53659): relocation truncated to fit: R_X86_64_32S against symbol `tss' defined in .bss section in /tmp/ccE6rPZI.o
desc.cpp:(.text+0x536a2): relocation truncated to fit: R_X86_64_32S against symbol `tss' defined in .bss section in /tmp/ccE6rPZI.o
desc.cpp:(.text+0x536cf): relocation truncated to fit: R_X86_64_32S against symbol `tss' defined in .bss section in /tmp/ccE6rPZI.o
desc.cpp:(.text+0x53732): relocation truncated to fit: R_X86_64_32S against symbol `tssa' defined in .bss section in /tmp/ccE6rPZI.o
desc.cpp:(.text+0x53737): relocation truncated to fit: R_X86_64_32S against symbol `tssd' defined in .bss section in /tmp/ccE6rPZI.o
desc.cpp:(.text+0x5373d): additional relocation overflows omitted from the output
collect2: error: ld returned 1 exit status

ho provato anche ad aggiungere -mcmodel=large -O0 e mi dà segmentation fault 

mi aveva già dato in passato questo errore e avevo risolto riducendo la dimension di un solo array ma stavolta non funziona poi a me servono questi array grandissimi

20 Risposte

  • Re: Trunced error

    Ma di cosa parliamo?

    Non pensi che dovresti mostrare il codice?

  • Re: Trunced error

    Il codice è enorme non riuscirete a leggerlo ed è pieno di array grandi dappertutto ma non si dovrebbe risolvere dando delle opzioni al compilatore?

    il codice non si può cambiare mi serve così.

  • Re: Trunced error

    No. Bisogna vedere il codice almeno nelle parti che hai cambiato prima di avere l'errore

    Comincia mostrando la funzione mkcha()

    P.S. Quali sarebbero questi array grandissimi ?? E perché ti servono ??

  • Re: Trunced error

    Le funzioni mkcha e mkspec non le ho toccate per niente ho aumentato gli array così

    int px[500][500], npx[2], olpx[2], stpx[2], cha[1000][1000], maxi = 10000, maxl = 100000, tm[1000][1000], con[1000][1000];
    int blas[1000][500][500], blal[1000][100000][3], blap[1000][2], blad[1000][2], blaa[1000];
    int gras[1000][500][500], gral[1000][100000][3], grap[1000][2], grad[1000][2], graa[1000];
    int whis[1000][500][500], whil[1000][100000][3], whip[1000][2], whid[1000][2], whia[1000];
    int muls[1000][500][500], mull[1000][100000][3], mulp[1000][2], muld[1000][2], mula[1000];
    int tss[8][500][500], tssl[16][100000][3], tssp[1000][2], tssd[1000][2], tssa[1000], ssl[1000][1000];

    vedete quegli array di 100000 poi ho modificato le funzioni che li usano ed è tutto normale fino a qui.

  • Re: Trunced error

    Hai calcolato quanti giga occupano quegli array? Sono centinaia e centinaia di giga, oltre il massimo dei 4 giga gestibili all'interno di un eseguibile a 32 bit, per cui hai quell'errore. Ma poi, a che ti servono tutti questi array?

    Come stai compilando? A 32 o 64 bit? E il linker?

    Come lanci gcc e ld ?

    Solo muls[1000][500][500] occupa 1 Gigabyte. Come pensi si possa fare con un array statico in un eseguibile a 32 bit?

    Dovresti utilizzare array dinamici, in un eseguibile a 64 bit, con funzioni di allocazione a 64 bit

  • Re: Trunced error

    Adesso comincia a tornare il discorso gli array sono troppo grandi e occupano troppa memoria quindi. potrei dividerli in tanti array più piccoli ma che alla fine metto insieme?

  • Re: Trunced error

    No, anche se li dividi lo spazio totale è uguale.

    Non devi usare array statici ma dinamici e con eseguibili a 64 bit

  • Re: Trunced error

    Se occupa un terabyte non può essere esguito da nessun computer devo purtroppo ridurre la dimensione degli array e di tutto il prog.

    deve essere a 32 bit ma che calcolo hai fatto per capire la memoria che occupa ogni singolo array?

    gli array statici sono più veloci dei dinamici vero?

  • Re: Trunced error

    Usa delle tabelle di servizio.

    I dati sono variabili e indicizzati  più memorizzati su disco o server 

  • Re: Trunced error

    No è meglio se riduco il prog sarà più veloce

  • Re: Trunced error

    No, volevo scrivere 1 Gigabyte … ma la situazione non cambia

    Nel caso di

    int muls[1000][500][500]

    un intero a 32 bit occupa 4 byte. Quindi 4 * 1000 * 500 * 500 = 1.000.000.000 byte

    Ma poi devi utilizzare per forza degli int da 4 byte? Quali valori min e max devi memorizzare?

    Quale tipo di programma stai scrivendo? Forse si può fare diversamente. Senza dettagli non si può fare nulla.

  • Re: Trunced error

    Non ho capito che significa min e max? io devo memorizzare dei numeri interi da 0 a 250.

    è un prog che lavora con le immagini e i loro pixel che sono tanti e hanno bisogno di array grandi per memorizzare

  • Re: Trunced error

    Scusa Machetto ma come vuoi scrivere codice con il C se non hai le minime basi della programmazione?

    Min e max sono minimo e massimo valore memorizzato, dunque 0 è il min e 250 il max

    In questo caso non usare gli int ma i byte ovvero

    unsigned char muls[1000][500][500]  

    che occuperà un quarto dello spazio

    Se lavori con immagini devi usare l'allocazione dinamica e usare solo quello che ti serve in un determinato momento, poi liberi la memoria.

  • Re: Trunced error

    Vedrò questo unsigned char se riesco a a farlo funzionare

Devi accedere o registrarti per scrivere nel forum
20 risposte