questo è un approccio più lento a tornare alla fase di esecuzione più veloce, ma se si voleva ottenere una migliore comprensione di ciò che sta causando il grande cambiamento, si potrebbe fare
Un esperimento alcuni 'esperimenti' sarebbe per trovare quale funzione potrebbe essere responsabile per il grande cambiamento. Per fare ciò, è possibile "profilare" il runtime di ciascuna funzione.
Ad esempio, utilizzare GNU gprof, parte di GNU binutils: http://www.gnu.org/software/binutils/
Documenti a: http://sourceware.org/binutils/docs-2.22/gprof/index.html
Questa misurerà il tempo impiegato da ogni funzione nel vostro programma, e dove è stato chiamato da. Effettuare queste misurazioni probabilmente avrà un "effetto Heisenberg"; prendere le misure influirà sulle prestazioni del programma. Quindi potresti voler provare un esperimento per trovare quale classe stia facendo la differenza.
Cercare di ottenere un'immagine di come il tempo di esecuzione varia tra il codice sorgente della classe nell'origine principale e lo stesso programma, ma con la classe compilata e collegata separatamente.
Per ottenere un'implementazione di classe nel programma finale, è possibile compilarlo e collegarlo, oppure solo # includerlo nel programma "principale", quindi compilare main.
Per rendere più facile per provare permutazioni, si potrebbe passare un #include o disattivare utilizzando #if:
#if defined(CLASSA) // same as #ifdef CLASSA
#include "classa.cpp"
#endif
#if defined(CLASSB)
#include "classb.cpp"
#endif
Quindi è possibile controllare quali file sono #include utilizzando bandiere riga di comando per il compilatore, per esempio
g++ -DCLASSA -DCLASSB ... main.c classc.cpp classd.cpp classf.cpp
Si potrebbe solo richiedere alcuni minuti per generare le permutazioni delle -Dflags e comandi di collegamento. Allora avresti un modo per generare tutte le permutazioni di compilare 'in una unità' vs separatamente collegate, quindi eseguire (e tempo) ciascuna.
presumo i file di intestazione sono avvolti nel solito
#ifndef _CLASSA_H_
#define _CLASSA_H_
//...
#endif
Si potrebbe quindi avere alcune informazioni sulla classe che è importante.
Questi tipi di esperimento potrebbero fornire alcune informazioni sul comportamento del programma e del compilatore che potrebbero stimolare altre idee per miglioramenti.
20-30 secondi per quanto tempo in totale? –
Inoltre, stai collegando/compilando sulla riga di comando, o usando un IDE come VS? Ovviamente ci vorrà più tempo per collegare i file sorgente insieme se tutto fosse in un unico file, ma la differenza di 20-30 secondi è troppo lunga per tutte le applicazioni tranne quelle enormi. Se dovessi indovinare, e questa è solo una supposizione, direi che dovresti diffondere la tua fonte su migliaia di file per ottenere quei tempi di costruzione. – prelic
Sei sicuro che non stai compilando usando i flag "debug"? 20 secondi sono ** un sacco **. – mfontanini