Este es un enfoque más lento para volver al tiempo de ejecución más rápido, pero si se quería obtener una mejor comprensión de lo que está causando el cambio grande, se podría hacer un par de 'experimentos'
Un experimento sería para encontrar qué función podría ser responsable del gran cambio. Para hacer eso, podría 'perfilar' el tiempo de ejecución de cada función.
Por ejemplo, utilice gprof GNU, parte de GNU binutils: http://www.gnu.org/software/binutils/
Docs en: http://sourceware.org/binutils/docs-2.22/gprof/index.html
Esto medirá el tiempo consumido por cada función en su programa, y donde fue llamado desde. Hacer estas mediciones probablemente tendrá un "efecto Heisenberg"; tomar medidas afectará el rendimiento del programa. Por lo que es posible que desee probar un experimento para encontrar qué clase está haciendo la mayor diferencia.
Trate de hacerse una idea de cómo varía el tiempo de ejecución entre tener el código fuente de clase en la fuente principal y el mismo programa pero con la clase compilada y vinculada por separado.
Para obtener una implementación de clase en el programa final, puede compilarla y vincularla, o simplemente #incluirla al programa 'principal' y luego compilar main.
Para que sea más fácil de tratar permutaciones, usted podría cambiar un # include o desactivar mediante #if:
#if defined(CLASSA) // same as #ifdef CLASSA
#include "classa.cpp"
#endif
#if defined(CLASSB)
#include "classb.cpp"
#endif
A continuación, puede controlar qué archivos se #include usando indicadores de línea de comando para el compilador, por ejemplo,
g++ -DCLASSA -DCLASSB ... main.c classc.cpp classd.cpp classf.cpp
Sólo se puede tardar unos minutos para generar las permutaciones de los -Dflags y comandos de enlace. Entonces tendrías una forma de generar todas las permutaciones de compilación 'en una unidad' frente a las vinculadas por separado, luego ejecutar (y cronometrar) cada una.
que asumen sus archivos de cabecera están envueltos en el habitual
#ifndef _CLASSA_H_
#define _CLASSA_H_
//...
#endif
A continuación, tendría alguna información acerca de la clase que es importante.
Estos tipos de experimentos pueden arrojar algo de información sobre el comportamiento del programa y el compilador que podría estimular otras ideas para mejoras.
20-30 segundos de la duración total? –
Además, ¿está vinculando/compilando en la línea de comandos, o usando un IDE como VS? Obviamente va a llevar más tiempo vincular los archivos fuente juntos que si todo estuviera en un solo archivo, pero la diferencia de 20-30 segundos es demasiado larga para todas las aplicaciones, excepto para las grandes. Si tuviera que adivinar, y esto es solo una suposición, diría que tendrías que expandir tu fuente alrededor de miles de archivos para obtener ese tipo de tiempos de compilación. – prelic
¿Está seguro de que no está compilando utilizando indicadores de "depuración"? 20 segundos es ** mucho **. – mfontanini