vorkompelierte Header
-
Wieso heisen eigentlich "vorkompelierte Header" so? "Header" (H-Dateien) werden doch von dem Präprozesser eingebunden - sprich Sie werden doch vor dem compilieren eingebunden. Oder?
-
Wenn du sagen wir mal 10 Headers inkludierst, welche wiederrum auch wieder Headers inkludieren, kann das Kompilieren sehr lange dauern. Vorallem bei Templates kann sich das bemerkbar machen. Also kann man diese Dinge vorkompilieren lassen.
Aus der MSDN:
---
Mithilfe dieser leistungsstarken Funktion können Sie einen stabilen Codeabschnitt kompilieren, den Code im kompilierten Zustand in einer Datei speichern und bei nachfolgenden Kompilierungen den vorkompilierten Code mit dem noch in Entwicklung befindlichen Code kombinieren. So können nachfolgende Kompilierungen beschleunigt werden, da der bereits stabile Code nicht neu kompiliert werden muss.Vorkompilierter Code trägt während des Entwicklungszyklus dazu bei, die Kompilierungszeit zu verringern. Dies gilt insbesondere in folgenden Fällen:
* Sie verwenden stets umfangreiche Codeabschnitte, die sich nur selten ändern.
* Das Programm besteht aus mehreren Modulen, die alle einen Standardsatz von Includedateien sowie dieselben Kompilierungsoptionen verwenden. In dem Fall können alle Includedateien zu einem vorkompilierten Header vorkompiliert werden.Die erste Kompilierung, durch die die vorkompilierte Headerdatei erstellt wird, benötigt etwas mehr Zeit als die nachfolgenden Kompilierungen. Diese können dann schneller ablaufen, da vorkompilierter Code einbezogen wird.
Sie können C- und C++-Programme vorkompilieren. Bei der C++-Programmierung ist es üblich, klassenspezifische Schnittstelleninformationen in getrennte Headerdateien zu schreiben. Diese Headerdateien können später in Programme einbezogen werden, die die Klasse verwenden. Durch Vorkompilieren dieser Header können Sie die Zeit reduzieren, die für die Kompilierung eines Programms benötigt wird.
---EDIT: ich trage in stdafx.h z.B. immer gleich <string>, <iostream> und andere häufig genutzten Library-Headers (auch aus Boost, wenn ich da welche brauche). Bei sehr komplexen Template-Libraries bemerkt man es sogar sehr deutlich.