La mia domanda è praticamente ripetuta this one, che richiede perché si verifica. Vorrei sapere se è possibile evitarlo.GCC: evitare il collegamento di molto tempo durante l'utilizzo di array statici
La questione è: se io allocare una grande quantità di memoria in modo statico:
unsigned char static_data[ 8 * BYTES_IN_GYGABYTE ];
poi linker (ld
) prende molto tempo per fare un eseguibile. C'è una buona spiegazione da @davidg su questo comportamento in questione ho dato sopra:
Questo ci lascia con la serie segue di passi:
L'assemblatore dice al linker che ha bisogno di creare una sezione di memoria lunga 1 GB.
Il linker va avanti e alloca questa memoria, in preparazione per inserirla nell'eseguibile finale.
Il linker si rende conto che questa memoria si trova nella sezione .bss ed è contrassegnata da NOBITS, il che significa che i dati sono solo 0 e non devono essere fisicamente inseriti nell'eseguibile finale. Evita di scrivere 1 GB di dati, invece di buttare via la memoria allocata.
Il linker scrive nel file ELF finale solo il codice compilato, producendo un piccolo file eseguibile.
un linker più intelligente potrebbe essere in grado di evitare i punti 2 e 3 di cui sopra, rendendo il tempo di compilazione molto più veloce
Ok. @davidg aveva spiegato perché il plug-in richiede molto tempo, ma voglio sapere come posso evitare . Forse GCC ha alcune opzioni, che dirà al linker allo be a little smarter
e allo avoid steps 2 and 3 above
?
Grazie.
P.S. Io uso GCC 4.5.2 in Ubuntu
Provare a utilizzare una variabile globale statica. – Claudio
Ho chiarito la tua domanda e il titolo un po ', quindi il lettore non deve leggere direttamente all'ultimo paragrafo per imparare * quale sia la domanda *, o perché non è un duplicato. Spero non ti dispiaccia. :) – jalf
@Claudio I ** ha ** utilizzato una variabile globale statica. – borisbn