Mi a statikus inline C-ben (nem C ++)? Nagyon meg vagyok zavarodva, hogy miért jelent sok funkciót statikus inline ' Linux kernelen.


Legjobb válasz

Ha egy függvényt statikusként definiálunk, a függvény csak ugyanazon forrásfájlban láthatók és használhatók. Nem hívható a forrásfájlon kívülről, ahol meg van határozva (kivéve, ha egy függvénymutatót használunk a meghívására). A függvény gyakorlatilag „el van rejtve” az aktuális forrásfájlon kívüli nézet elől.

Ha egy függvényt beillesztve definiálunk, akkor a fordító létrehozza a függvény belső részének kódját ott, ahol a függvényhívások történnek, ahelyett, hogy hívásokat generálna a függvényre. Ez a technika javíthatja a teljesítményt a funkcióhívás általános költségeinek kiküszöbölésével, de ennek következtében megnövelheti a létrehozott kód memóriaterületét. A fordító azonban nem köteles a függvény kódját inline létrehozni, így ha a függvény túl hosszú vagy összetett, vagy a fordító valamilyen oknál fogva egyszerűen nem tudja megtenni, akkor normál függvényhívás jön létre. Ezért mondjuk, hogy az inline csak egy utalás a fordítónak.

Ezek összerakása, egy olyan függvény, amelyet mindkét statikus és beágyazott olyan, amely láthatatlan lesz az aktuális forrásfájlon kívül, és amelynek kódja generáljon inline, bárhová hívja, ha a fordító meg tudja csinálni. Ezt a megközelítést általában nagyon kicsi, egyszerű, gyakran hívott belső segítő funkcióknál használják, amelyek nem részei egy nyilvános API-nak.

Válasz

Inline függvények esetén a ezeket a függvényhívás általános költsége nélkül átmásolja a hívó funkcióba.

A kernelben széles körben használják. Ez általában a teljesítmény javításának és az optimalizálásnak a módja, bár nem feltétlenül ez a helyzet.

Főleg kis időre kritikus funkciókhoz használják, és ezzel nagy teljesítménybeli különbségeket tapasztalhatunk.

Még akkor is, ha nem inline kulcsszót használunk, a fordító megpróbálhatja az optimalizálás részeként a beillesztést.

Alapszabályként a statikus inline függvényeknek egy fejlécben kell lenniük. Meghatároz egy belső funkciót, belső összekapcsolással. Tehát azt mondhatjuk, hogy az ilyen függvények lokálisak lesznek egy fordítási egység számára, és beágyazódnak benne.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük