Mejor estimación: las compilaciones de depuración están limitadas por E/S, mientras que las compilaciones de versión son limitadas por el procesador (en este caso).
Hemos realizado una amplia evaluación comparativa de nuestro sistema de compilación: muchos proyectos grandes, algunos pequeños. Las compilaciones DEBUG
escriben mucha información *.pdb
, archivos *.obj
mucho más grandes (para la información de depuración adicional), etc. El resultado es una actividad de disco enormemente mayor. Esto se acentúa aún más si usted tiene un montón de "literales" en su código fuente (tablas, símbolos, cadena de literales), etc.
Por el contrario, la RELEASE
construye escribir a cabo mucho más pequeña *.obj
archivos, y doesn No se moleste en escribir las bases de datos de "depuración" (si compila RELEASE
con los interruptores típicos). Sin embargo, el enlazador en las compilaciones RELEASE
tiene que hacer sus optimizaciones y otro trabajo mucho más significativo que simplemente no se hace en DEBUG
, por lo que está vinculado al procesador. Esto se penaliza en el tiempo adicional por RELEASE
si "compila para maximizar la velocidad/tamaño" con los modificadores más desafiantes para el enlazador.
(Sin embargo, sí, el RELEASE
construcción aún debe de E/S de actualización de las direcciones en el bienestar ejecutable incorporado-en-disco, pero ya que el ejecutable es mucho más pequeño en el RELEASE
compilación, página mucho menos, por lo que la pena de E/S en RELEASE
construcción no es tanto como para DEBUG
acumulación.)
que está observando un 3x "RELEASE
es más caro que DEBUG
". Eso es correcto para algunos proyectos que están vinculados a E/S con muchas plantillas, muchos símbolos y literales, etc. Verifique sus discos: ¿están llenos, o simplemente "lentos", y/o con algunos sectores defectuosos? ? Esos empeorarán (serán más lentos) las compilaciones DEBUG
.
Sí, otras construcciones deben ser al revés, con "RELEASE
algo así como 3 veces más caro que DEBUG
". Esas compilaciones están vinculadas con el procesador/vinculador, en lugar de estar vinculadas a E/S.
[ACTUALIZACIÓN], veo en el comentario sobre la pregunta que esto es para "static-library, no-linking". Es un escenario bastante, en el peor de los casos, para una penalización de tiempo para I/O (mucha actividad de disco, sin enlaces) y sin una penalización de procesador (ya que no se realizan optimizaciones). Por lo tanto, si tiene un 3x "DEBUG
-es más lento-que-RELEASE
", probablemente sea tan malo como se pueda (para este proyecto), y eso no es atípico. Cuando agrega opciones de enlace, el RELEASE
se volverá más lento.
¿Está utilizando encabezados precompilados en ambos? –
¿Cuáles son las opciones de compilación? –
Sí PCH en ambos. Las opciones de compilación además de/I/D PCH son:/Od/Gm/EHsc/RTC1/MDd/W4/nologo/c/Wp64/ZI/TP/errorReport: prompt/wd4018/Zm200. Sí, me preguntaba si teníamos que "escribir algún gran archivo opcional" allí. Los tiempos son solo para construir la biblioteca, así que no hay enlaces. – Philip