Nejlepší odpověď
Když je funkce definována jako statická , funkce může být lze zobrazit a použít pouze ve stejném zdrojovém souboru. Nelze jej volat zvenčí zdrojového souboru, kde je definován (pokud k jeho volání není použit ukazatel funkce). Funkce je účinně „skryta“ z pohledu mimo aktuální zdrojový soubor.
Když je funkce definována jako inline , ptáte se kompilátor, který generuje kód pro interní funkce této funkce přímo tam, kde probíhá volání funkce, místo generování volání funkce. Tato technika může zlepšit výkon tím, že eliminuje režii volání funkce, ale může v důsledku toho zvýšit paměťovou stopu generovaného kódu. Kompilátor však není povinen generovat vložený kód funkce, takže pokud je funkce příliš dlouhá nebo složitá, nebo to kompilátor z nějakého důvodu prostě nedokáže, vygeneruje se normální volání funkce. Proto říkáme, že inline je pouze nápovědou kompilátoru.
Jejich sloučení, funkce, která je definována jako oba statický a vložený je ten, který bude mimo aktuální zdrojový soubor neviditelný a ten, jehož kód bude být generovány inline, ať už to nazýváte kdekoli, pokud to kompilátor dokáže. Tento přístup se běžně používá pro velmi malé, jednoduché, často nazývané interní pomocné funkce, které nejsou součástí veřejného API.
Odpověď
V případě vložených funkcí se kód v jsou zkopírovány do funkce volání bez režie volání funkce.
V jádře je široce používán. To se obvykle provádí jako způsob pro zlepšení výkonu, větší optimalizace, i když to nemusí být nutně nutné.
Používá se hlavně pro malé časově kritické funkce a díky tomu můžeme vidět velký rozdíl ve výkonu.
Avšak i když nepoužíváme inline klíčové slovo, kompilátor se může pokusit provést inlining jako součást optimalizace.
Zpravidla by statické inline funkce měly být v záhlaví. Definuje inline funkci s vnitřní vazbou. Můžeme tedy říci, že takové funkce budou pro překladovou jednotku lokální a budou v ní vloženy.