Ho un progetto che utilizza un po 'di meta-programmazione di template in C++. Questo rende i tempi di compilazione lunghi. Capisco che non posso avere la torta e mangiarlo anch'io, ma mi piacerebbe sapere alcuni suggerimenti e trucchi su come ridurre i tempi di compilazione. Ho già provato le istanze esplicite e mentre ciò potrebbe aiutare in alcuni casi, molte volte, le istanze sono uniche per una particolare unità di compilazione nel qual caso l'istanziazione esplicita non fa nulla per aiutare. E ora stiamo parlando solo di Clang che fa un buon lavoro. Quando provo questo su G ++, il tempo di compilazione esplode. Per un file, ho rinunciato ad aspettare che si compilasse dopo 45 minuti.Quali sono i colpevoli comuni della lentezza del TMP
- Ci sono dei colpevoli comuni quando si tratta di meta-programmazione modello, cose che sono note per essere spesso problematiche? Quali tecniche dovrei evitare e cosa dovrei fare invece?
- Ci sono aree in cui è noto che GCC ha prestazioni peggiori di Clang e c'è un modo per aggirare questo problema?
Uso principalmente tecniche di C++ 11 con vaniglia semplice, non utilizzo Boost MPL o librerie simili.
Purtroppo, queste sono cose che già facciamo. Alcune cose che ho trovato davvero aumentate in termini di compilazione sono state l'uso di 'std :: make_shared' e' std :: shared_ptr'. Li ho sostituiti con il mio conteggio dei riferimenti utilizzando 'std :: atomic' dato che comunque stavo cancellando il tipo. –
@EmilEriksson E 'possibile utilizzare ancora 'std :: shared_ptr' e non ottenere troppo overhead aggiuntivo http://blog2.emptycrate.com/content/template-code-bloat-revisited-smaller-makeshared~~V~~3rd – lefticus
In questo caso, anche se ho ridotto il numero di 'istanze std :: shared_ptr', avrei ancora troppo molti di loro e' std :: shared_ptr' è più costoso di creare un'istanza della mia implementazione. Ovviamente, è costoso, per una buona ragione, che sia necessaria flessibilità per una classe di librerie standard che verrà utilizzata ovunque. Ma ho un caso d'uso molto specifico e quindi, sono stato in grado di ridurre i tempi di compilazione utilizzando un'altra soluzione. –