Du bist nicht angemeldet.

#1 21.01.2017 03:17:32

stefanhusmann
Moderator

Vorkompilierte Headerdateien

Hallo, hier bin ich erstmals mit vorkompilierten Headerdateien in Berührung gekommen. Ich muss zugeben, davon noch nie gehört zu haben. Daher die Frage an die erfahrenen C- bzw. C++-Kenner:

Was hat es damit auf sich und welchen Verwendungszweck hat dies?

Offline

#2 21.01.2017 15:59:20

T.M.
Mitglied

Re: Vorkompilierte Headerdateien

Vorkompilierte Header sind eine Möglichkeit, die langen Compilierzeiten (vor allem unter C++) dadurch zu verkürzen, daß immergleiche Quellen (d.h. Header) nur ein einziges Mal gelesen, ausgewertet und dann in binärer Form abgelegt werden. Diese Binärdaten werden dann von Compiler in weit kürzerer Zeit eingelesen. So weit die Theorie. Bei Microsoft gibt es diese precompiled headers schon seit 20 Jahren und man kann damit ein Projekt, das vielleicht eine Stunde lang kompiliert, auf 20min herabdrücken, wenn man es richtig macht.

Dabei gibt es aber mehrere Dinge zu beachten, sonst kann man abgesehen von einer beträchtlichen Menge Daten, die auf der Platte entstehen, vor allem auch eine Verlängerung (!) der Compilierzeiten beobachten:

a) die Header, die in den vorkompilierten Header hinein sollen, müssen absolut konstant sein, sie dürfen sich nicht ändern, d.h. man darf idealerweise nicht seine eigenen Header, an denen man gerade entwickelt, dort hineintun, sondern am besten nur fremde - jedesmal wenn sich ein Header ändert, muß die riesige Binärdatei neu erzeugt werden

b) man muß ein Maß dafür finden, was alles konkret vorkompiliert werden soll und was draußen bleiben kann, damit der vorkompilierte Header möglichst klein bleibt, bei Microsoft kann so eine Binärdatei locker mal 100MB oder auch 200MB groß werden, aber dann bringt es nix mehr, im Gegenteil, dies bremst den Festplattenchache dermaßen aus, daß die Platte am Ende zum Flaschenhals wird und einem auch die schnellsten vier Prozessorkerne nix nutzen

c) die Compileroptionen müssen konstant bleiben, für verschiedene Compilierziele (Debug, Release usw.) müssen deshalb verschiedene precompiled headers erzeugt und unterschieden werden - wer hingegen ab und zu Optionen ändert, muß meistens ebenfalls den precompiled header neu erzeugen

Beitrag geändert von T.M. (21.01.2017 16:01:28)

Offline

#3 23.01.2017 16:38:57

stefanhusmann
Moderator

Re: Vorkompilierte Headerdateien

Danke, das erklärt auch, warum sie so selten verwendet werden, zumindest bei Arch Linux' offiziellen Paketen.

Offline

#4 23.01.2017 17:47:48

T.M.
Mitglied

Re: Vorkompilierte Headerdateien

stefanhusmann schrieb:

Danke, das erklärt auch, warum sie so selten verwendet werden, zumindest bei Arch Linux' offiziellen Paketen.

Unter Microsoft VisualStudio ist deren Verwendung die Regel. Ein leer erstelltes C++-Projekt hat automatisch einen vorkompilierten header, man muß ihn nur noch füllen.

Offline

Schnellantwort auf dieses Thema

Schreibe deinen Beitrag und versende ihn
Deine Antwort

Fußzeile des Forums