Cel mai bun răspuns
Când o funcție este definită ca static , funcția poate poate fi văzut și utilizat numai în același fișier sursă. Nu poate fi apelat din afara fișierului sursă unde este definit (cu excepția cazului în care este folosit un pointer de funcție pentru a-l apela). Funcția este efectiv „ascunsă” din vizualizarea din afara fișierului sursă curent.
Când o funcție este definită ca inline , solicitați compilator pentru a genera codul pentru internele funcției chiar acolo unde au loc apelurile funcției, mai degrabă decât să genereze apeluri către funcție. Această tehnică poate îmbunătăți performanța prin eliminarea funcției suprasolicitarea apelurilor, dar, în consecință, poate crește amprenta de memorie a codului generat. Cu toate acestea, compilatorul nu are nicio obligație să genereze codul funcției în linie, deci dacă funcția este prea lungă sau complexă sau compilatorul nu poate face acest lucru dintr-un anumit motiv, este generat un apel funcțional normal. De aceea spunem că inline este doar un indiciu către compilator.
Punându-le împreună, o funcție care este definită ca ambele static și inline este unul care va fi invizibil în afara fișierului sursă curent și unul al cărui cod va fi să fie generat în linie oriunde îl apelați, dacă compilatorul o poate face. Această abordare este frecvent utilizată pentru funcții de asistență interne foarte mici, simple, frecvent numite care nu fac parte dintr-un API public.
Răspuns
În cazul funcțiilor inline, codul din acestea sunt copiate în funcția de apelare fără cheltuielile generale ale funcției de apel.
În nucleu este utilizat pe scară largă. Acest lucru se face de obicei ca o modalitate de îmbunătățire a performanței, mai multă optimizare, deși nu neapărat este cazul.
Este utilizat în principal pentru funcții critice de timp redus și putem vedea diferențe mari de performanță făcând acest lucru.
Cu toate acestea, chiar dacă nu folosim cuvinte cheie inline, compilatorul poate încerca să facă inlining ca parte a optimizării.
De regulă, funcțiile statice inline ar trebui să fie într-un antet. Acesta definește o funcție în linie cu legătură internă. Deci, putem spune că astfel de funcții vor fi locale pentru o unitate de traducere și vor fi integrate în ea.