¿Qué es estático en línea en C (no C ++)? Yo, mucho, estoy confundido acerca de por qué muchas funciones declaradas como ' static inline ' en el Kernel de Linux.


Mejor respuesta

Cuando una función se define como estática , la función puede solo se puede ver y usar dentro del mismo archivo fuente. No se puede llamar desde fuera del archivo fuente donde está definido (a menos que se use un puntero de función para llamarlo). La función está efectivamente «oculta» de la vista fuera del archivo fuente actual.

Cuando una función se define como en línea , le está preguntando al compilador para generar el código para los componentes internos de la función justo donde tienen lugar las llamadas a la función, en lugar de generar llamadas a la función. Esta técnica puede mejorar el rendimiento al eliminar la sobrecarga de llamadas a funciones, pero como consecuencia puede aumentar la huella de memoria del código generado. Sin embargo, el compilador no tiene la obligación de generar el código de la función en línea, por lo que si la función es demasiado larga o compleja, o el compilador simplemente no puede hacerlo por alguna razón, se genera una llamada a la función normal. Por eso decimos que inline es solo una sugerencia para el compilador.

Poniéndolos juntos, una función que se define como static y inline es uno que será invisible fuera del archivo fuente actual, y uno cuyo código generarse en línea donde sea que lo llame, si el compilador puede hacerlo. Este enfoque se usa comúnmente para funciones auxiliares internas muy pequeñas, simples y frecuentemente llamadas que no son parte de una API pública.

Respuesta

En el caso de funciones en línea, el código en ellos se copian en la función de llamada sin la sobrecarga de la llamada de función.

En el kernel se usa ampliamente. Por lo general, esto se hace como una forma de mejorar el rendimiento, más optimización, aunque no necesariamente es el caso.

Se usa principalmente para funciones críticas de poco tiempo y podemos ver una gran diferencia de rendimiento al hacerlo.

Sin embargo, incluso si no estamos usando palabras clave en línea, el compilador puede intentar hacerlo como parte de la optimización.

Como regla general, las funciones estáticas en línea deben estar en un encabezado. Define una función en línea con vinculación interna. Entonces, podemos decir que tales funciones serán locales a una unidad de traducción e integradas en ella.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *