Programacion en capas ERa: Recomendación LibroProgramación

Carlos Manuel Duclos Vergara carlos en embedded.cl
Mar Mar 9 18:44:20 CLST 2004



> Yo tengo entendido que una forma muy eficiente de escribir codigo C "puro"
> basado en objetos (distinto a OO, ya que no hay herencia), es utilizando
> estructuras con campos que son punteros a funciones que tienen como primer
> parametro generalmente una variable de la susodicha estructura, el famoso
> "objeto" this, con lo cual se tienen en las estructuras los datos y los métodos
> que manipulan esos datos :-) creo que gran parte del kernel de linux esta
> escrito así... o me equivoco, doc?
> 

dependiendo de tu definicion de eficiente. generalmente utilizar punteros 
a funciones puede no resultar ser una buena idea debido al tiempo que 
pierdes derreferenciando a la funcion. Puede parecer ridiculo, pero hay 
veces que ese pequenno tiempo hace una gran diferencia.
Respecto al kernel de linux, hay algunas partes donde se utiliza esa forma 
de escribir codigo (particularmente para que todos los drivers tengan la 
misma interfaz), pero hay otros lados donde simplemente no se puede 
utilizar eso. El problema de usar punteros a funciones esta en que 
derreferencias en tiempo de ejecucion, lo cual aparte de introducir un 
tiempo de delay puede tener consecuencias desagradables (por ejemplo 
cuando tienes varios ambientes de memoria separados, lo que es tipico en 
programacion de kernel), y el puntero puede apuntar al lado oscuro de la 
luna en el mejor de los casos... Sin embargo, si se acostumbra  usar una 
estructura con punteros para algunas zonas del kernel.




Más información sobre la lista de distribución Linux