Ich habe ein Projekt, das ziemlich viel C++ - Vorlage Meta-Programmierung verwendet. Dies macht die Kompilierungszeiten lang. Ich verstehe, dass ich den Kuchen nicht haben und es auch essen kann, aber ich würde gerne einige Tipps und Tricks wissen, wie man kompilierte Zeiten reduziert. Ich habe bereits explizite Instanziierungen versucht, und obwohl dies in manchen Fällen hilfreich sein kann, sind die Instanzen oft für eine bestimmte Kompilierungseinheit einzigartig, in welchem Fall explizite Instanziierung nichts hilft. Und jetzt reden wir nur über Clang, der einen ziemlich guten Job macht. Wenn ich dies auf G ++ versuche, explodiert die Kompilierzeit. Für eine Datei habe ich es aufgegeben, nach 45 Minuten darauf zu warten, dass sie kompiliert wird.Was sind Übeltäter für TMP-Langsamkeit
Ich benutze meist einfache C++ 11 Techniken, ich benutze keine Boost MPL oder ähnliche Bibliotheken.
Leider sind das Dinge, die ich schon mache. Einige Dinge, die ich wirklich kompilierte Zeiten fand, war meine Verwendung von 'std :: make_shared' und' std :: shared_ptr'. Ich ersetzte diese durch meine eigene Referenzzählung mit 'std :: atomic', da ich sowieso eine Art Löschung vornahm. –
@EmilEriksson Es ist möglich, 'std :: shared_ptr' zu verwenden und nicht zu viel zusätzlichen Overhead zu bekommen http://blog2.emptycrate.com/content/template-code-bloat-revisited-smaller-makeshared – lefticus
In diesem Fall sogar Wenn ich die Anzahl der 'std :: shared_ptr'-Instanziierungen reduzieren würde, hätte ich immer noch zu viele von ihnen und 'std :: shared_ptr' ist teurer zu instanziieren als meine eigene Implementierung. Natürlich ist es aus einem guten Grund teuer, dass Flexibilität für eine Standardbibliotheksklasse erforderlich ist, die überall verwendet wird. Aber ich habe einen sehr spezifischen Anwendungsfall und konnte daher die Kompilierzeiten durch eine andere Lösung reduzieren. –