Para C++, el mayor cuello de botella es la E/S del disco. Muchos encabezados incluyen otros encabezados hacia adelante y hacia atrás, lo que hace que se abran y se lean muchos archivos para cada unidad de compilación.
Puede lograr una mejora significativa si mueve las fuentes a un disco RAM. Aún más si se asegura de que sus archivos de origen se lean exactamente una vez.
Así que para nuevos proyectos comencé a incluir todo en un solo archivo al que llamo _.cpp
. Su estructura es así:
/* Standard headers */
#include <vector>
#include <cstdio>
//...
/* My global macros*/
#define MY_ARRAY_SIZE(X) (sizeof(X)/sizeof(X[0]))
// My headers
#include "foo.h"
#include "bar.h"
//...
// My modules
#include "foo.cpp"
#include "bar.cpp"
Y solo compilo este único archivo.
Mis encabezados y archivos fuente no incluyen nada, y usan espacios de nombres para evitar conflictos con otros módulos.
Siempre que mi programa omita algo, agrego su encabezado y fuente en este módulo solamente.
De esta forma, cada archivo de origen y encabezado se lee exactamente una vez y se crea muy rápidamente. Los tiempos de compilación aumentan solo linealmente a medida que agrega más archivos, pero no en forma cuadrática. Mi proyecto de hobby es de aproximadamente 40000 loc y 500 módulos, pero todavía compila unos 10-20 segundos. Si muevo todas las fuentes y encabezados a un disco RAM, el tiempo de compilación se reduce a 3 segundos.
Desventaja de esto, que las bases de código existentes son bastante difíciles de refactorizar para usar este esquema.
En realidad, esto no es independiente del idioma. Diferentes idiomas tienen diferentes requisitos para un compilador, lo que afecta significativamente el tiempo de compilación, –
Cierto, pero mi pregunta es más sobre cómo mejorar el rendimiento en diferentes compiladores, entornos, idiomas, etc. Generalmente uso Visual Studio, pero a veces msbuild, perl , etc. – esac