[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