[C con Clase] ¿Alguien sabe destripar librerías...?

Programante programante en gmail.com
Sab Ago 30 12:28:19 CEST 2008


xonly escribió:
> ciertamente tienes toda la razón del mundo, por eso no me gustan las librerías, y es precisamente lo que se hace en la función _write del fichero write.c que es uno de los múltiples que abre el visual cuando meto el código en visual, que evidentemente en Dev-C++ no creo que haga pues falla lo de la "¡" pero que me resulta totalmente absurdo al igual que a ti.
>   
La función _write no te la mete el compilador, sino que está en msvcrt. 
No te vayas a las librerías del sistema, que te pierdes. No es culpa del 
compilador. Es como llegar a ntdll y quejarse de que el compilador te 
introduce ese código. Todos los programas en windows acaban llamando a 
ntdll, que es quien realiza las llamadas al sistema. Suelen hacer 
msvcrt->kernel32->ntdll->llamada al sistema. Y como sé que se te 
ocurrirá preguntar si no puedes realizar directamente la llamada al 
sistema: no, no puedes. En teoría sí, pero en cuanto salga un Service 
Pack para Windows, cambiará el id de cada llamada (es generado por un 
script) y tu programa dejará de funcionar.
En cambio, si programas para stdio, tu programa puede funcionar 
perfectamente -recompilando- tanto en linux como en solaris, como en 
windows... Y el mismo programa para windows desde windows 95 hasta Vista.


> nno creo que haya ningún curso de binario, pero desde luego lo que si me gustaría es poder prescindir poquito a poco de las librerías standar, que sólo meten código inservible, pues al ser reutilizables, se usan para multitud de historias, con el mismo código, si ya sé que es contracorriente, pero es lo que me gusta, hacer lo que los demás no hacen.
>   
A veces se generaliza un poco. Por ejemplo, seguro que printf(...) llama 
a fprintf(stdout, ...) Si ejecutase directamente el código de fprintf 
sería un poco más rápido, y evitaría un nivel de indirección. Pero 
estaría duplicando código, lo que haría la librería más larga y 
produciría problemas a la hora de actualizar la función. Al final no 
vale la pena.

Otro asunto a tener en cuenta es que si haces tus propias librerías 
estándar es posible que ralentices tu programa, puesto que lo haces más 
grande y el código de la librería, que seguramente ya estaba en memoria 
por haberla cargado otros programas, tiene que cargarse (más tiempo, más 
memoria que ocupa).

Finalmente, si quieres ver una implementación de una librería estándar, 
puedes mirar libc, que es la usada en linux 
http://www.gnu.org/software/libc/ Aunque no te lo aconsejo. Consigue 
funcionar en multitud de sistemas, pero no es precisamente sencilla de 
entender.





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