Abbiamo una soluzione di Visual Studio 2005 C++/Mfc di grandi dimensioni, 1 progetto con circa 1300 file di origine (quindi circa 650.h e 650 file .cpp). Usiamo anche Boost e alcune altre librerie (COM: MSXML, Office).Come aggirare il crash di Visual Studio Compiler
Recentemente, ho aggiunto alcune istanze di boost :: multi_index per velocizzare un po 'le cose. Tutto questo viene compilato per la maggior parte del tempo. Ma ora, quando eseguo una ricostruzione completa (rilascio), il compilatore si arresta in modo anomalo in alcuni moduli.
Fatal Error C1060: "compiler is out of heap space"
ho già provato a ridurre include nel file di intestazione precompilata (rimosso praticamente tutto, tranne le intestazioni standard MFC). Inoltre, ho rimosso l'opzione del compilatore/Zm200 (che prima serviva per compilare il file di intestazione precompilato).
La cosa strana: quando premo F7 (build) dopo il crash del compilatore, il processo di compilazione continua senza problemi (o almeno fino al prossimo crash del compilatore, dove premo nuovamente F7). Ma sarebbe bello poter fare una compilazione completa senza pause.
Posso influenzare l'ordine di costruzione dei singoli moduli? In questo modo, potrei inserire i moduli "problematici" all'inizio del processo (e sperare che gli arresti non si spostino semplicemente su altri moduli).
BTW: una compilazione completa richiede circa 90 minuti.
Aggiornamento:
Grazie per le risposte. Sono stato in grado di sbarazzarsi del blocco del compilatore e ridurre significativamente il tempo di compilazione. Ecco cosa ho fatto:
- Ho rimosso tutti gli include dal file di intestazione precompilato, solo le intestazioni standard di windows/mfc sono rimaste come erano. Questo mi ha costretto ad aggiungere ancora più include in altri moduli, ma alla fine tutto è stato incluso dove era necessario. Ovviamente, questo passaggio ha aumentato il tempo di compilazione, ma mi ha permesso di essere più efficiente nel passaggio successivo.
- Ho installato la versione di prova di ProFactors IncludeManager. La Vista dettagli progetto può essere esportata in Excel, dove i colli di bottiglia e i candidati da includere nel file di intestazione precompilata possono essere individuati abbastanza velocemente.
- La maggior parte del tempo di compilazione è stato sprecato con alcuni file di intestazione che includevano un mucchio di altri file di intestazione (che includevano alcuni altri ...). Ho dovuto usare le dichiarazioni in avanti per sbarazzarmi di alcune brutte dipendenze. Inoltre, ho spostato alcune classi/funzioni da intestazioni critiche nei propri moduli.
- What to put in precompiled header? (MSVC) mi ha aiutato a ottenere gli include nel file di intestazione precompilato a destra. Ho aggiunto intestazioni STL, Boost, Windows. poi aggiunto le nostre intestazioni (più o meno stabili, ottimizzate), oltre al file di intestazione della risorsa.
- Ho ripetuto i passaggi 3 e 4 alcune volte, verificando sempre con IncludeManager per i nuovi candidati.
- I passaggi da 1 a 5 hanno portato il tempo di compilazione (modalità di rilascio) inattivo, da 90 a circa 45 minuti.
- Ho disabilitato la generazione di informazioni di ricerca per tutto, dal momento che non sembra utilizzarlo (e non sono riuscito a trovare alcuna informazione per quello che è veramente buono per ...). Questo ha tagliato altri 6 minuti del processo di costruzione.
- Ho aggiunto il comando/MP (multiprocessore) al comando del compilatore C++. Ora il tempo di ricostruzione è stato ridotto a 22 minuti. Tutto ciò è stato fatto su un PC single core.
- Ho spostato l'intera soluzione su un PC dual core. La ricostruzione del progetto dura 16 minuti lì.
- Creazione di una build di debug è 5 minuti più veloce:
- 17 minuti sulla macchina single core,
- 11 minuti sulla macchina dual core.
Aggiornamento 2:
Sopra, dove ho detto "macchina single core", in realtà una macchina dual core più lento si intende.
'Sopra, dove menziono la" macchina single core ", si intende in realtà una macchina dual core più lenta. Lol –