Kompilierzeit von Headern verkürzen



  • Danke für den Link, aber ganz verstehe ich die Sache immer noch nicht. Woher weiss der Header, was man vorkompilieren will (ich nehme nicht an, sämtliche Funktionen und Klassen). Und wie sollen beispielsweise Templates vorkompiliert werden? Oder wird da einfach bei einer neuen Instanziierung wieder neu kompiliert?



  • Nexus schrieb:

    Danke für den Link, aber ganz verstehe ich die Sache immer noch nicht. Woher weiss der Header, was man vorkompilieren will (ich nehme nicht an, sämtliche Funktionen und Klassen)

    Doch. Der größte Anteil der Zeit geht beim Parsen des Codes drauf. PCH bedeutet gewöhnlich, daß der Compiler den Code parst und seine internen Datenstrukturen in die PCH-Datei persistiert, um sie bei Bedarf einfach laden zu können.



  • Ah okay. Dann ist "vorkompiliert" eigentlich das falsche Wort...
    So versteh ich es auch mit den Templates.

    Noch etwas: In MSVC++ muss man in jedem Modul ein #include "stdafx.h" haben, oder? Kann man das nicht irgendwie vermeiden?



  • Nexus schrieb:

    Ah okay. Dann ist "vorkompiliert" eigentlich das falsche Wort...
    So versteh ich es auch mit den Templates.

    Noch etwas: In MSVC++ muss man in jedem Modul ein #include "stdafx.h" haben, oder? Kann man das nicht irgendwie vermeiden?

    Nein.



  • Also vorkompilierte Header verkürzen die Sache enorm. Ich mache die grundsätzlich in jedem Projekt, da das bereist ab der ersten Datei spürbar ist. (Natürlich wenn man die Header bereits kompiliert hat). Vor allem, wenn man nicht gerade den neusten Computer hat, oder auf einem kleineren Notebook programmiert ist das echt ein Segen.



  • Wenn du mehrere Cores hast, gib MSVC unbedingt das Flag /MPn mit n >= 2 an; so kannst du beim Compilieren parallelisieren. Hilft auch recht, besonders wenn du einen Quad hast^^



  • Gut, vielen Dank für die Hinweise. Dann werde ich in Zukunft wohl auch vermehrt vorkompilierte Header einsetzen.



  • Wegen des /MPn-Flags (bei mir /MP2): Das scheint mit /Gm (minimale Neuerstellung) inkompatibel zu sein. Auch nicht gerade Sinn der Sache...



  • Nexus schrieb:

    Wegen des /MPn-Flags (bei mir /MP2): Das scheint mit /Gm (minimale Neuerstellung) inkompatibel zu sein. Auch nicht gerade Sinn der Sache...

    Ich würde da garnichts umstellen! Habe einen DualCore, und er kompiliert selbstständig zwei Projekte gleichzeitig, wenn es die Abhängigkeiten erlauben. Natürlich inkl. /Gm.



  • z.T. parallel compilieren: Mit dem MPCL Plugin kann man mit Visual Studio hübsch Dateien im selben Projekt parallel compilieren, nicht bloss zwei Projekte parallel:

    http://todobits.es/mpcl.html

    Funktioniert bei mir 1A, und ist sofort und sauber deinstalliert, wenns nicht klappen sollte.


Anmelden zum Antworten