Beste svaret
Når en funksjon er definert som statisk , kan funksjonen bare sees og brukes i samme kildefil. Det kan ikke kalles utenfor kildefilen der den er definert (med mindre en funksjonspeker brukes til å kalle den). Funksjonen er «skjult» effektivt utenfor gjeldende kildefil.
Når en funksjon er definert som innebygd , spør du kompilator for å generere koden for funksjonens interne rett der funksjonsanropene foregår, i stedet for å generere anrop til funksjonen. Denne teknikken kan forbedre ytelsen ved å eliminere funksjonssamtalen, men kan som en følge øke minnefotavtrykket til den genererte koden. Kompilatoren er imidlertid ikke forpliktet til å generere funksjonens kode innebygd, så hvis funksjonen er for lang eller kompleks, eller kompilatoren bare ikke kan gjøre det av en eller annen grunn, genereres en normal funksjonsanrop. Derfor sier vi at inline bare er et hint til kompilatoren.
Sette dem sammen, en funksjon som er definert som begge statisk og inline er en som vil være usynlig utenfor den nåværende kildefilen, og en hvis kode vil genereres integrert uansett hvor du kaller det, hvis kompilatoren kan gjøre det. Denne tilnærmingen brukes ofte for veldig små, enkle, ofte kalt interne hjelperfunksjoner som ikke er en del av et offentlig API.
Svar
Ved integrerte funksjoner, koden i dem blir kopiert til anropsfunksjonen uten funksjonskallets overhead.
I kjernen er den mye brukt. Dette gjøres vanligvis som en måte å forbedre ytelsen på, mer optimalisering, men ikke nødvendigvis.
Den brukes hovedsakelig til små tidskritiske funksjoner, og vi kan se stor ytelsesforskjell ved å gjøre det.
Men selv om vi ikke bruker innebygd nøkkelord, kan kompilatoren prøve å gjøre inlining som en del av optimaliseringen.
Som en tommelfingerregel skal statiske innebygde funksjoner være i en overskrift. Den definerer en innebygd funksjon med kobling internt. Så vi kan si at slike funksjoner vil være lokale for en oversettelsesenhet og innebygd i den.