Az építtető, hogyan lehet felgyorsítani összeállítás segítségével előre lefordított header

C ++ Builder: hogyan lehet felgyorsítani összeállítás segítségével előre lefordított header

C ++ Builder: hogyan lehet felgyorsítani összeállítás segítségével előre lefordított header


Előre lefordított fejlécek drámaian megnöveli
összeállítása sebességgel.
C ++ Builder Language Guide


Ahelyett, hogy jön azonnal egy példát. Komplett egység (build) projekt, amely körülbelül 170 cpp-modulok segítségével előre lefordított header történik 811 másodperc, a sorok száma dolgozza fel a fordító 1.808.780. Ha össze az ugyanabban a projektben nélkül előre lefordított fejlécek, összeszerelési idő 2399 másodperc, és a feldolgozott sorok számát a fordító - 45.261.820. Lenyűgöző, nem igaz? A díj és ez a gyorsulás, elvileg nem nagy - előrefordított képet, melynek mérete körülbelül 40 MB.

Amikor a forráskódot fordítjuk, a fordító kell feldolgoznia * .cpp fájlt a projekt, és mindegyik szerepel a * .h - fájlokat. Ugyanakkor kezelni egyéni fejlécet és a szokásos, például vcl.h vagy Word2k.h. Az összeg a kódot, amely a standard fejlécek lehet nagyon nagy, például Word2k.h fájl mérete meghaladja az 5 MB, ott több mint 130 000 sornyi kódot.

Mivel a tartalom a szabványos fejlécek nem változott, összeállítják minden épít a projekt időpocsékolás. Előre lefordított fejlécek segítsen megoldani ezt a problémát - a standard fájlokat egyszer állítják össze, majd a lefordított bináris kép.

A működési elv lefordított fejlécek
Hogy ellenőrizzék az előre lefordított rendeltetésszerű fordító irányelv #pragma hdrstop. Minden header fájlokat is tartalmazza ezt az irányelvet helyezünk egy-egy képet, például:

Ez létrehoz egy képet tartalmazó szekvenciát össze vcl.h és string. Ez a kép lehet használni más cpp-fájl, ha azt akarjuk, hdrstop irányelv tartalmazza ugyanazt a fájlt ugyanabban a sorrendben. Hadd hívjam fel a figyelmet arra, milyen fontos, nem csak az összetétele, hanem az, hogy a fejléc - akkor is, ha a következő cpp-fájl tartalmazza az azonos címmel, de az első szett: string, majd vcl.h, akkor erre a cpp-fájl új képet hoz létre.

Így az újrafelhasználás előre lefordított header szükséges két feltétel:

    - készítmény tartalmazza fájlokat hdrstop irányelv azonosnak kell lennie
    - A szekvencia file engedélyezéséhez hdrstop irányelv azonosnak kell lennie

Csökkentse költségeit összeállításának szabványos fejlécek minimálisra lehet használni, ha a összeállításához egy kép, amely az összes szabványos fejlécek a projekthez szükséges. Ehhez szükség van a következőkre:
    - Minden projekt cpp-fájlok ugyanabban a blokkban felvételen az irányelv hdrstop
    - ez az egység tartalmaznia kell az összes szabványos fejléc fájlokat a projekthez szükséges

Teljesíti ezeket a feltételeket éppen elegendő erre a célra az elején minden cpp fájl meg kell tenni a következő sorokat:

ahol pch.h - tartalmazó fájl felvételét az összes szabványos fejlécek:

A teljes szöveg az én verzióm ez a fájl végén látható. A h-fájlokat tartalmazza az előre lefordított kép egymásra korlátozás - nem kellene inicializált adat például, vannak vonalak math.hpp:

Jelenléte miatt ezek állandók math.hpp a pch.h nem indíthat.
By the way, a C ++ Builder hozzáadásával új modulok projekt munkagépek leírt PCH stratégia. Például, amikor létrehoz egy új alkalmazás, unit1.cpp fájl így néz ki:

Ha megnézzük a szöveget vcl.h, kiderül, hogy ez egy wrapper felvételét számos más szabványos fejlécek.

Kezelése vcl.h készítmény tartalmazza a fejléc segítségével speciális karakterek (INC_VCLDB_HEADERS, INC_VCLEXT_HEADERS et al.). Az én verzió pch.h ezek a jelek használatával határozzák #define, hogy vcl.h, ami növeli a számát include fájlokat.

Mivel a jelenlegi projekt elindításához segítségével előre lefordított header

Még egy nagy projekt, hogy elkezdje használni az előre lefordított fejlécek igen egyszerű.

Az első dolog, amit meg kell, hogy hozzon létre saját header fájlt pch.h. Úgy kell elhelyezni a projekt mappa tartalmát ez a fájl végén található.

Aztán a projekt tulajdonságait, hogy caching előre lefordított fejlécek, ez is arra ösztönzik, hogy jelezze a „személyes” fájlt, amelyben tárolni a képet előre lefordított fejlécek: Project - Options - fül Compiler, a csoport „Pre-össze fejlécek”. Ott kell kiválasztani a „Cache előre összeállított fejlécek”, és a helyszínen „Fájlnév”, meg „pch.csm”. Ezzel a konfigurációval egy képet előre lefordított fejlécek található a projekt mappájában, a pch.csm fájlt.

Aztán az elején minden cpp-modul beszúrni kívánt 2 sor:

Minden korábban szereplő header fájlok maradnak a helyükön, akkor nem kell eltávolítani. Például:

Mivel az összes szabványos fejlécek a Guard újra be, majd ismételt rájuk hivatkozásokat nem vonja maga után a visszakapcsolás.

Alapvetően ha pch.h, műszaki szükségességét, hogy a szabványos fejlécek eltűnnek. Azonban érdemes mégis az adja meg az összes szükséges minden egyes modul alábbi címek irányelv #pragma hdrstop. Először is, ez bizonyos mértékig dokumentált modul - include állományok lehet megítélni, milyen lehetséges előnyökkel ezt a modult. Másodszor, ez megkönnyíti az újrahasznosítás modulok más projektekben, amelyek vagy nem használt pch.h, vagy annak tartalmát más lehet.

Elméletileg tudjuk tovább növelni a hatékonyságot a válogatás, ha szerepel pch.h nem csak a hagyományos, hanem az összes egyéni fejlécet. Gyakorlatilag, mivel az egyéni fejlécek változik gyakran, akkor ez maga után gyakori recompilation pch.h, ami negatív hatással van a fordítási idő. Ezen túlmenően, az egyéni fejlécek általában nem túl nagy, és össze gyorsan. Ezért tartalmazza azokat pch.h nem tanácsos.

Hogyan ellenőrizhető, hogy a előrefordított fejlécek hatékonyan használják

Amikor új fájlokat a projekt ne felejtsük el, hogy bevonja őket pch.h, mert különben nem általános előrefordított kép lesz. Ugyanez a helyzet akkor fordulhat elő, ha a szabványos fejlécek szerepelnek egyes modulok, amelyek nem szerepelnek pch.h. Annak érdekében, hogy nyomon követni ezeket a fájlokat, számos módja van:

    - vizuális megfigyelése a fordítási folyamatot. Jellemzően a sorok számát állítják össze egyetlen fájlba nem haladhatja meg a 10000-15000 sorokban
    - Amennyiben a projekt választott egy egyedi fájl tárolja a kép előre lefordított fejléc és a fájl neve pch.csm, szükséges megjegyezni, jelenléte kiegészítő fájlok neveit PCH. # 00, PCH. # 01, stb Ha az összes projekt fájlokat használják ugyanazt előrefordított kép, a kiegészítő fájlok, azonban csak egy - pch # 00 .. Ha több fájl van, az azt jelenti, hogy bizonyos cpp-modulok további képeket.
    - a projekt tulajdonságait, hogy az opció megjelenítése Általános üzenetek (Project -> Options -> Compiler lapon). Majd az üzenetek ablak jelenik meg további információkat a fordítási folyamatot, beleértve a tájékoztatást, hogyan kell letölteni előre lefordított fejlécet. Ha a fájl már előre lefordított letöltött kép, az üzenetek ablakot, amikor a neve megjelenik „[C ++] Loaded előre lefordított fejlécek”.


Mintegy előzőekből
Ha az itt bemutatott kérdéseket és megjegyzéseket, kész vagyok elfogadni őket - írja [email protected].


Ui
Már többször jelenteni problémák előre lefordított fejlécek - a Builder elindul, figyelmeztetés „Dialogs.hpp (437): W8058 nem hozható létre előre lefordított header: inicializált adatok header”, és nem hoz létre előre lefordított header.
Mivel a mi van, nem értettem, de ahogy írtam Aleutdinov Sergey Harizovich, sikerült megtalálni a megoldás:
idézet:

A probléma megoldódott „megoldás”.

Alkotó AllHeaders.hpp header fájlt, amely tartalmazza az összes nem VCL hodery (Developer Express, FIBPlus, saját ritkán módosított fejlécek, stb)
Minden projekt fájl kerül három sort:
#include
#include
#pragma hdrstop

Kapcsolódó cikkek