Mikä on staattinen linja C: ssä (ei C ++)? Olen hyvin hämmentynyt siitä, miksi monet toiminnot on ilmoitettu staattisiksi riviksi ' Linux-ytimessä.


Paras vastaus

Kun funktio määritetään staattiseksi , toiminto voi voidaan nähdä ja käyttää vain samassa lähdetiedostossa. Sitä ei voida kutsua määritetyn lähdetiedoston ulkopuolelta (ellei sitä käytetä funktiosoittimella). Toiminto on käytännössä ”piilotettu” nykyisen lähdetiedoston ulkopuolella olevalta näkymältä.

Kun funktio määritellään inline , pyydät kääntäjä tuottaa koodin toiminnon sisäosille juuri siellä, missä funktiokutsuja tapahtuu, sen sijaan, että generoidaan puhelut funktiolle. Tämä tekniikka voi parantaa suorituskykyä poistamalla toimintokutsujen yleiskustannukset, mutta voi sen seurauksena lisätä muodostetun koodin muistin jalanjälkeä. Kääntäjällä ei kuitenkaan ole velvollisuutta luoda funktion koodia riviin, joten jos funktio on liian pitkä tai monimutkainen tai kääntäjä ei yksinkertaisesti pysty tekemään sitä jostain syystä, luodaan normaali funktiokutsu. Siksi sanomme, että inline on vain vihje kääntäjälle.

Niiden yhdistäminen, funktio, joka määritellään molemmiksi staattinen ja inline on sellainen, joka ei ole näkyvissä nykyisen lähdetiedoston ulkopuolella, ja jonka koodi luodaan inline missä tahansa sitä kutsutaan, jos kääntäjä voi tehdä sen. Tätä lähestymistapaa käytetään yleisesti hyvin pienissä, yksinkertaisissa, usein kutsutuissa sisäisissä auttajatoiminnoissa, jotka eivät ole osa julkista sovellusliittymää.

Vastaus

Sisäisten toimintojen ollessa kyseessä ne kopioidaan kutsutoimintoon ilman toimintakutsun yleiskustannuksia.

Ytimessä sitä käytetään laajasti. Tämä tehdään tyypillisesti keinona parantaa suorituskykyä, optimoida enemmän, vaikkakaan ei välttämättä.

Sitä käytetään pääasiassa pieniin aikakriittisiin toimintoihin, ja näemme tekemällä näin suuria suorituskykyeroja.

Vaikka emmekä käytä sisäistä avainsanaa, kääntäjä voi yrittää tehdä rivinvaihdon osana optimointia.

Nyrkkisääntönä staattisten rivitoimintojen tulisi olla otsikossa. Se määrittelee sisäisen kytkennän sisäisen toiminnon. Joten voimme sanoa, että tällaiset toiminnot ovat paikallisia käännösyksikölle ja inline siinä.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *