2009-03-01 38 views
10

Observo en la misma máquina que C necesita mucho menos tiempo que C++ para compilar. ¿Por qué?¿Por qué compila C# mucho más rápido que C++?

NOTA 1: No he hecho ninguna referencia científica.

NOTA2: Antes de que alguien diga que esto no está relacionado con la programación, estoy implementando un analizador, estoy encontrando lo que puedo hacer desde el principio para aumentar la velocidad de compilación.

NOTA3: Tengo una pregunta similar Why do compilations take so long?. Esta pregunta se refiere a la diferencia específica de C/C++ a C#. Es obvio que un lenguaje simple sería más rápido de compilar que un lenguaje complejo, pero C y C# son ambos lenguajes complejos.

mi punto a punto: 1) C/C++ es LENTO desde el preprocesador y los encabezados. 2) una gran cantidad de encabezados causa una gran cantidad de datos para analizar. especialmente cuando cada archivo puede utilizar el preprocesador puede cambiar el código 3) C# diferir parte compilación de arranque 4 programar) las instrucciones IL son simples, la máquina no es

+0

Me pregunto si ha leído las respuestas a su pregunta anterior sobre este tema: http://stackoverflow.com/questions/588884/why-do-compilations-take-so-long –

+0

sí, tengo. Esta pregunta se enfoca en la diferencia específica de c a C# –

+0

que se mencionan específicamente en esa respuesta ... son las cosas que hace C++ la diferencia, nada especial que C# lo haga – ShuggyCoUk

Respuesta

2

Debido a que C++ compila a código de máquina, mientras que C# para byte de código. ¿Ha notado el retraso de la primera vez que inicia su programa .NET. Es cuando el código de bytes obtiene JITed (compilado a código de máquina).

+0

Sin embargo, hay mucho más en esta pregunta que eso. –

+1

Delphi compila también código de máquina, y es más rápido que C#, que no lo hace. – Arafangion

+1

el principal problema es la fuente, no el objetivo. – peterchen

0

Creo que es probablemente debido a la CANTIDAD de análisis que tiene que hacer, en lugar de la velocidad del analizador en sí.

C++ normalmente usa el preprocesador C, que extrae muchos archivos de inclusión (como otros han sugerido, y la otra pregunta contiene muchas respuestas similares). Esto aumenta la cantidad de código para analizar.

Así que si usted les está comparando con el propósito de escribir un analizador ... saber que usted no debe tener .h de estilo incluye archivos :)

5

Hay dos cuestiones a considerar por separado - el número de fases de procesamiento, y la complejidad de la orientación.

Una compilación típica de C++ implica varias fases (aunque pueden ejecutarse simultáneamente) donde el preprocesador maneja directivas y macros, luego el compilador C++ procesa el código resultante. Es bastante común que el preprocesador genere un resultado que es significativamente más grande, código que todo necesita ser analizado y procesado por el compilador real.

Además, tenga en cuenta que el compilador de C++ se enfocará en el lenguaje x86 o x64 de la máquina, manejando toda la optimización desde el principio y tratando de hacer el mejor uso del hardware que no está realmente optimizado en el desarrollo de estilo OO.

Por el contrario, el compilador C# se dirige a Microsoft Intermediate Language (MSIL), una plataforma similar a un código de máquina de nivel superior que fue diseñada para ser utilizada para el desarrollo de OO. Muchos de los constructos provistos por C# se correlacionan directamente con las instrucciones de IL, haciendo que la compilación sea realmente fácil. Se difiere una buena cantidad de optimización y otras actividades hasta el inicio del programa real, en cuyo punto está optimizado para la máquina disponible exacta.

Cuestiones relacionadas