2009-11-22 12 views

Respuesta

11

Está haciendo lo que dice: está generando el código de máquina . Muchos compiladores traducen las fuentes de C/C++ a alguna representación interna intermedia que luego se utiliza como fuente para generar el código de máquina real. El compilador de Visual C++ (como muchos otros compiladores) lo hace en lotes: primero traduce un grupo de archivos fuente a esa representación intermedia y luego los convierte a todos en código máquina (y luego comienza a trabajar en el siguiente lote). Esto es lo que sucede cuando ves los mensajes "Generando código".

No sé qué es exactamente lo que está usando para dividir los archivos fuente en lotes. Tal vez funciona simplemente por tamaño: una vez que el tamaño total de todas las representaciones intermedias generadas hasta ahora llega a cierto límite, cambia al modo "generación de código". Tal vez hay alguna otra lógica en funcionamiento allí también.

En cualquier caso, tenga en cuenta que el término "código" no calificado en este caso no se refiere al código fuente, lo que significa que no tiene nada que ver con plantillas y/o preprocesador o algo por el estilo. Además, referirse a las fuentes C con un "código" no calificado (en contraposición al calificado "source code") es algo muy nicho, más familiarizado con el departamento de marketing que con los programadores reales. En el nivel de los programadores, nadie se refiere a las fuentes C simplemente como "código" :)

+0

buena distinción, comencé a preguntarme sobre esta nueva solución en la que he estado trabajando para saber por qué está ocurriendo tanta generación de código, _source code_generation_ supuse erróneamente. – jxramos

-2

Visual Studio invoca LINK.exe del enlazador. Funciona principalmente con archivos de objetos como entrada, para producir un archivo ejecutable como salida, pero también es capaz de realizar otro trabajo relacionado con estos y otros archivos relacionados. Linker Command-Line Syntax @ MSDN

+1

No creo que en este caso, los medicamentos se refieren a la compilación de la fuente, no al tiempo de enlace. Aunque tiene razón en que el vinculador también puede generar código para crear instancias de plantillas. –

3

El compilador recibe varios archivos de entrada a la vez y lee (analiza) varios de ellos de una sola vez, y solo produce los archivos de salida (objetos) para ellos antes de leer más archivos de entrada. Supongo que se trata de una optimización, presumiblemente porque el acceso mixto de lectura/escritura al disco es más lento que cuando está ordenado en (primero) acceso de lectura y (luego) acceso de escritura.

+0

Supongo que, quien haya votado negativamente esto, lo sabe mejor. ¿Me cuidas para iluminarme? – sbi

-2

Las instancias de plantilla (y otro tipo de código) pueden generar código (o no en algunas condiciones).

+1

Sí, pero VC sí se toma su tiempo para esta fase, incluso cuando no hay plantillas en el código. – sbi