2009-11-22 14 views

risposta

11

Sta facendo quello che dice: sta generando il codice macchina . Molti compilatori traducono fonti C/C++ in una rappresentazione interna intermedia che viene successivamente utilizzata come origine per generare il codice macchina effettivo. Compilatore Visual C++ (come molti altri compilatori) esegue questo nei lotti : innanzitutto converte un gruppo di file di origine in quella rappresentazione intermedia e quindi li converte tutti in codice macchina (e quindi inizia a lavorare sul batch successivo). Questo è ciò che accade quando vedi i messaggi "Generating code".

Non so quale logica usi esattamente per dividere i file di origine in lotti. Forse funziona semplicemente in base alle dimensioni: una volta che la dimensione totale di tutte le rappresentazioni intermedie generate fino ad ora raggiunge un certo limite, passa alla modalità di "generazione del codice". Forse c'è anche qualche altra logica al lavoro.

In ogni caso si noti che il termine non definito "codice" in questo caso non fa riferimento al codice sorgente, il che significa che non ha nulla a che fare con i modelli e/o il preprocessore o qualcosa del genere. Inoltre, il riferimento a fonti C con "codice" non qualificato (in contrasto con il qualificato "source code") è una cosa molto di nicchia, più a casa con il reparto marketing che con programmatori reali. A livello dei programmatori nessuno si riferisce a fonti C come "codice" :)

+0

buona distinzione, stavo cominciando a chiedermi in questa nuova soluzione che ho lavorato sul perché si stia verificando così tanto la generazione del codice, generazione del codice sorgente_ Ho erroneamente assunto. – jxramos

-2

Visual Studio sta richiamando il linker LINK.exe funziona principalmente con i file oggetto come input, per produrre un file eseguibile come output, ma è anche in grado di svolgere molto altro lavoro su questi e sui file correlati. Linker Command-Line Syntax @ MSDN

+1

In questo caso non credo, meds si riferisce alla compilazione di fonti, non al tempo di collegamento. Sebbene tu abbia ragione, il linker può anche generare codice per creare istanze di template. –

3

Il compilatore riceve più file di input contemporaneamente e legge (analizza) diversi di quelli in una volta sola e produce solo output (file oggetto) per essi, prima di leggere più file di input. Suppongo che si tratti di un'ottimizzazione, presumibilmente perché l'accesso misto in lettura/scrittura al disco è più lento rispetto a quando è ordinato in (primo) accesso in lettura e (quindi) accesso in scrittura.

+0

Suppongo che, chiunque abbia votato questo, sappia meglio. Ti va di illuminarmi? – sbi

-2

Le istanze di modello (e un altro tipo di codice) potrebbero generare codice (o non in alcune condizioni).

+1

Sì, ma VC impiega il suo tempo per questa fase anche quando non ci sono modelli nel codice. – sbi