2009-03-01 7 views
10

Noto sulla stessa macchina, ci vuole molto meno tempo di C++ per compilare. Perché?Perché C# si compila molto più velocemente di C++?

NOTA 1: Non ho fatto alcun riferimento scientifico.

NOTA 2: Prima che qualcuno dice che questo non è programmazione relativa, io sono l'attuazione di un parser, mi sto trovando quello che posso fare dalla velocità ottenere andare ad aumentare compilazione.

NOTA3: Ho una domanda simile Why do compilations take so long?. Questa domanda sta chiedendo la differenza specifica da C/C++ a C#. È ovvio che un linguaggio semplice sarebbe più veloce da compilare di un linguaggio complesso, ma C e C# sono entrambi linguaggi complessi.

mio asporto: 1) C/C++ è lento dal preprocessore e le intestazioni. 2) un sacco di intestazioni causa molti più dati da analizzare. soprattutto quando ogni file può utilizzare il preprocessore può cambiare il codice 3) C# rinviare alcune compilation di programmare l'avvio 4) istruzioni IL sono semplici, la macchina non è

+0

Mi devo chiedere se hai letto le risposte alla tua domanda precedente su questo argomento: http://stackoverflow.com/questions/588884/why-do-compilations-take-so-long –

+0

si ho. Questa domanda si concentra sulla differenza specifica da c a C# –

+0

quelli che sono chiamati specificamente in quella risposta ... sono le cose che C++ fa la differenza, niente di speciale che C# fa – ShuggyCoUk

risposta

2

causa C++ compila a codice macchina, mentre C# a codice byte. Hai notato il lag quando avvii per la prima volta il tuo programma .NET. È quando il codice byte diventa JIT (compilato per codice macchina).

+0

C'è molto di più in questa domanda. –

+1

Delphi compila anche il codice macchina, ed è più veloce di C#, che non lo fa. – Arafangion

+1

il problema principale è la fonte, non il bersaglio. – peterchen

0

penso che sia probabilmente a causa della quantità di analisi ha a che fare, piuttosto che la velocità del parser stesso.

C++ utilizza normalmente il preprocessore C, che tira in un sacco di includere i file (come altri hanno suggerito, e l'altra questione contiene molte risposte di simile). Questo rallenta la quantità di codice da analizzare.

Quindi, se li sta confrontando per scopi di scrittura di un parser ... imparare che non si dovrebbero avere .h in stile file include :)

5

Ci sono due questioni separate da prendere in considerazione - il numero di fasi di elaborazione e la complessità del targeting.

Una compilazione C++ tipica prevede un numero di fasi (sebbene possano essere eseguite contemporaneamente) in cui il preprocessore gestisce le direttive e le macro, quindi il compilatore C++ stesso elabora il codice risultante. È piuttosto comune per il preprocessore generare un output significativamente più grande, codice che deve essere analizzato ed elaborato dal compilatore vero e proprio.

Inoltre, tieni presente che il compilatore C++ avrà come target il linguaggio macchina x86 o x64, gestendo tutte le ottimizzazioni in anticipo e tentando di sfruttare al meglio l'hardware che non è realmente ottimizzato nello sviluppo di stile OO.

Al contrario, il compilatore C# ha come target Microsoft Intermediate Language (MSIL), una piattaforma di livello macchina simile a un livello superiore che è stata progettata per essere utilizzata per lo sviluppo OO. Molti dei costrutti forniti da C# mappano direttamente nelle istruzioni di IL, rendendo la compilazione davvero facile. Un giusto controllo dell'ottimizzazione e di altre attività viene rimandato fino all'avvio del programma effettivo, a quel punto viene ottimizzato per l'esatta macchina disponibile.

Problemi correlati