Cum de a accelera compilarea utilizând anteturile precompilate în constructor

Cum de a accelera compilarea folosind anteturile precompilate în C ++ Builder

Antetele precompilate pot crește dramatic vitezele de compilare.

C ++ Builder Ghid de limbă







În loc de introducere, dați imediat un exemplu. O construcție completă a unui proiect care conține aproximativ 170 de module cpp, când se utilizează antete precompilate, are loc în 811 secunde, în timp ce numărul de linii compilate este de 1.808.780. Când compilați același proiect fără a utiliza antete precompilate, timpul de construire este de 2399 de secunde, iar numărul de linii procesate de compilator este de 45,261,820. Impresionantă, nu-i așa? Plata pentru această accelerare, în principiu, nu este mare - o imagine precompilată, a cărei dimensiune este de aproximativ 40 MB.

La compilarea codului sursă, compilatorul trebuie să proceseze toate fișierele de proiectare * .cpp și toate fișierele * .h incluse în ele. În acest caz, sunt procesate atât fișiere antet personalizate, cât și cele standard, cum ar fi vcl.h sau Word2k.h. Numărul de cod găsit în anteturile standard poate fi foarte mare, de exemplu, dimensiunea fișierului Word2k.h depășește 5 MB, există mai mult de 130.000 de linii de cod în el.

Deoarece conținutul anteturilor standard nu se schimbă, compilarea acestora cu fiecare construcție a proiectului este o pierdere de timp. Anteturile precompilate ajută la rezolvarea acestei probleme - fișierele standard sunt compilate o singură dată și apoi este utilizată o imagine binară compilată.







Principiul funcționării anteturilor precompilate

Pentru a controla directivele precompilate, se folosește directiva compilatorului #pragma hdrstop. Toate fișierele de antet incluse înaintea acestei directive sunt plasate într-o singură imagine, de exemplu:

Această secvență creează o imagine care conține vcl.h și șirul compilat. Această imagine va fi utilizată pentru un alt fișier cpp dacă aceleași fișiere sunt incluse în directiva hdrstop în aceeași ordine. Voi observa că nu numai compoziția, dar și ordinea anteturilor sunt importante - chiar dacă următorul fișier cpp include aceleași anteturi, dar mai întâi șir specificat și apoi vcl.h, atunci va fi creată o nouă imagine pentru acest fișier cpp.

Astfel, pentru a reutiliza antetul precompilat, trebuie îndeplinite două condiții:

- compoziția fișierelor incluse înaintea directivei hdrstop trebuie să fie aceeași

- Secvența de includere a fișierelor înaintea directivei hdrstop trebuie să fie aceeași

Reducerea costului de compilare a anteturilor standard la minim este posibilă numai dacă compilați o imagine care conține toate anteturile standard necesare pentru proiect. Acest lucru necesită:

- Toate fișierele cpp ale proiectului au avut același bloc de incluziuni înainte de directiva hdrstop

- Acest bloc ar trebui să includă TOATE fișierele header standard necesare pentru proiect

Este foarte simplu să executați aceste condiții, pentru aceasta, la începutul fiecărui fișier cpp trebuie să introduceți următoarele rânduri:

unde pch.h este fișierul care conține toate anteturile standard:







Articole similare

Trimiteți-le prietenilor: