Beépített függvények (inline) azok számára, akik nem tudják, és azok számára, akik elfelejtették, Intel® szoftver

Elhelyezés az érv a verem, vezérlő átviteli függvény és vissza belőle, a kibocsátás a stack - mindezt teszi a költségeket, amelyek enyhén, de befolyásolja a sebességet. Tudod kap egy győzelem az időben, ha adsz a fordítónak, hogy másolja funkció kód közvetlenül a programkód a hívó létrehozása helyett a funkció a memóriában. Az ilyen függvények beágyazott (inline).

A triviális példa a beágyazott függvény hívás:


Meg kell jegyezni, hogy az inline - csak egy ajánlás, és nem egy parancs, hogy a fordító, hogy cserélje hívások testét funkcióit. Ki tudja számítani a beiktatása megfelelő, és figyelmen kívül hagyja a soros módosító és kezeli a függvény a szokásos módon. Tehát, hogy azt mondta, minden akaratának a fordító. (Kb. Windowson __forceinline módosítót. Ami a fordító, hogy építsék a funkció)

Miért van, hogy néha jobb, hogy figyelmen kívül hagyja a módosító átvenni?
Lássuk, hogyan inline függvények befolyásolhatja néhány jellemzője a program.

sebesség:

  • gyorsabb - bevezetése a funkció kódot a kódot a program segít elkerülni a használatát felesleges szabályozások (kapcsolatos funkció hívás befejezése és visszatérés belőle)
  • Lassan - túl gyakori használata inline függvények azonos nagy, vezet mélyítette a kód (ezen felül, a fordító néha kénytelen használni több átmeneti változókat, hogy megőrizzék a szemantika), ami oda vezethet, hogy a csúszás, azaz a állandóan szükség van a folyamat az operációs rendszer program alapozó új oldalakat

A méret a futtatható fájl:

  • növelése - mint már említettük, túl gyakori használata inline függvények azonos nagy, vezet mélyítette a kódot, és ennek megfelelően nőtt a méret a futtatható fájl
  • csökkentett - köszönhetően a optimalizáló fordító futtatható állomány mérete csökkenthető nagyon kis inline függvények, mint a fordító, nem kell, hogy hozzon létre „extra” utasítást, hogy hívja fel, és kilép a telephelyén érvek a verem és vissza. Szintén végrehajtása során egy nagy beépített funkciók a programkód optimalizáló fordítót is kiküszöbölhetők a felesleges kódot, ami viszont csökkenti a fájl méretét.

Csúszás (cséplés):

  • növelése - túl gyakori használata inline függvények azonos nagy, vezet mélyítette a kódot, amely azt eredményezheti, hogy a csúszás, azaz a állandóan szükség van a folyamat az operációs rendszer program alapozó új oldalakat
  • csökkenhet - csökkentheti a virtuális memória mennyisége oldalak a memóriában egyszerre. Például, ahol f () egy függvény g () függvény. funkciókódok valószínűleg vannak különböző oldalain virtuális memória, a bevezetése a kódot a fordító függvény g () a kódot az f függvény (). Gyakran mindkét funkciót a kód ugyanazon az oldalon

Szorzás definiált
A fordító tudja helyezni a funkció kód a szervezetben csak akkor, ha a teste az aktuális fordítási egység. Így a beépített funkciókat kell meghatározni minden fordítási egység, amelyben használják őket, hogy nem tetszik a kapcsoló.
az úgynevezett gyenge (gyenge) karaktert hoztak létre, hogy megoldja ezt a problémát. Miután a linker megállapítja egy ilyen karakter, a többit figyelmen kívül hagyja. Még ha a fordító nem veszi figyelembe a módosító, a megállapodás sikeres lesz.
Due módosító inline. funkció karakter lesz gyenge jellem. így nyugodtan tegye a beépített függvény egy * .h-fájlt, és használja a különböző fordítási egység.
például:

g ++ test.cpp -C
g ++ test1.cpp -C
g ++ test.o test1.o -o // inline hiba nélkül "többszörös meghatározása"

Nos, mi a makrók?
Megjegyezzük, hogy a makrók előkészített és a fordító inline-funkciókat. Mivel a makrók nem látható a fordító, akkor nehezebb a hibakeresés.
Soros funkciók tisztában vannak a körét, és a vizsgálat típusától, szemben a makrót.
Beépített függvények túlterhelését tagfüggvény, set minták és más előnyei is vannak, amelyek nem érhetők makrókat.

Ki tudja, a módosító Inline?
Módosítót támogatja a C ++, C99, GNU C Sőt, az összes szabványt működni a különböző módosítóval.

Így
1) megfelelő felhasználásra beágyazott funkciók javíthatja a teljesítményt és csökkenti a méretét a futtatható fájlt.
2) Lehet (és kell) kell meghatározni a különböző transzlációs egységek
3) beépített függvény adott egy jelentős növekedés képest normális működését, meg kell a kis méret.
4) A fordító továbbra tegyen meg mindent, inline módosító csak a célzást. Ő lehet figyelmen kívül hagyni a módosító hol van, és tedd, ahol nem létezik.

További információ a lehetőségek fordító optimalizáció, tekintse meg optimalizálási közlemény.