Quest-ce que la statique en ligne en C (et non en C ++)? Je ne sais pas pourquoi de nombreuses fonctions déclarées comme ' static inline ' sur Linux Kernel.


Meilleure réponse

Lorsquune fonction est définie comme static , la fonction peut être vu et utilisé uniquement dans le même fichier source. Il ne peut pas être appelé depuis l’extérieur du fichier source où il est défini (sauf si un pointeur de fonction est utilisé pour l’appeler). La fonction est effectivement «masquée» de la vue en dehors du fichier source actuel.

Lorsquune fonction est définie comme inline , vous demandez au compilateur pour générer le code des composants internes de la fonction là où les appels de fonction ont lieu, plutôt que de générer des appels à la fonction. Cette technique peut améliorer les performances en éliminant la surcharge des appels de fonction, mais peut par conséquent augmenter lempreinte mémoire du code généré. Cependant, le compilateur n’a aucune obligation de générer le code de la fonction en ligne, donc si la fonction est trop longue ou trop complexe, ou si le compilateur ne peut tout simplement pas le faire pour une raison quelconque, un appel de fonction normal est généré. Cest pourquoi nous disons quinline est juste un indice au compilateur.

En les mettant ensemble, une fonction qui est définie comme les deux static et inline est celui qui sera invisible en dehors du fichier source actuel, et celui dont le code sera être généré en ligne partout où vous lappelez, si le compilateur peut le faire. Cette approche est couramment utilisée pour de très petites fonctions daide internes simples, fréquemment appelées, qui ne font pas partie dune API publique.

Réponse

Dans le cas de fonctions en ligne, le code en them est copié dans la fonction appelante sans la surcharge de lappel de fonction.

Dans le noyau, il est largement utilisé. Ceci est généralement fait comme un moyen daméliorer les performances, plus doptimisation, bien que ce ne soit pas nécessairement le cas.

Il est principalement utilisé pour les fonctions critiques de petite durée et nous pouvons voir une grande différence de performances en le faisant.

Cependant, même si nous nutilisons pas de mot-clé en ligne, le compilateur peut essayer de faire une insertion dans le cadre de loptimisation.

En règle générale, les fonctions en ligne statiques devraient être dans un en-tête. Il définit une fonction en ligne avec liaison interne. Nous pouvons donc dire que ces fonctions seront locales à une unité de traduction et intégrées dans celle-ci.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *