Libertonia
Portada · Todo · Software Libre · Desarrolladores · Comunidad · Internet · Tecnología · Meta · Diarios
C++ y librerías dinámicas

Programación
Por runlevel0
departamento C++_dudas_existenciales , Sección Desarrolladores
Puesto a las Sun Aug 11th, 2002 at 12:43:04 PM CET
Me he pasado recientemente de C a C++.
Algunas cosas me han llamado la atención y me han surgido algunas incógnitas sobre librerías dinámicas, los objetos y la propia estructura POO.
Bien, mis preguntas puede que sean un poco curiosas y no sé muy bien cómo enfocarlas.

 


No me ha costado mucho entender la filosofía subyacente a la POO, cada objeto encapsulado, etc, etc..
Pero hay algunos conceptos que se me resisten:

Quiero crear un programa para trabajar con ficheros (concretamente /usr/src/linux/.config y /etc/X11/XF86Config-4). Se trata de cosas muy símples y estándar con la librería fstream, nada del otro mundo... Se me ocurrió la idea de que para modularizar el código al máximo podría echar mano de la carga dinámica de librerías y la verdad es que tanto su uso en los programas, como su creación mediante libtool o ld es bastante asequible y no exige mucho trabajo.
La ventaja que yo le veo es que metiendo mis funciones en libs dinámicas puedo andar metiéndoles mano individualmente sin tener que retocar el resto del código.
Así si meto las funciones para editar los ficheros en una lib, la cargo dinámicamente con las funciones de la libdl dlopen(), dlsym() y amigos diréctamente dónde la vaya a usar y la cierro explícitamente cuando no la necesite.
Y si quiero cambiar las funciones de una librería puedo meterle mano a este código y recompilar sólo la librería. Como no uso nada demasaido exótico, no habría en principio demasiados problemas, ni siquiera necesito punteros...
Bueno, mi duda es la siguiente:
¿Como afecta esto al tamaño del binario, la cantidad de RAM requerida y las prestaciones?
Evidentemente la carga de la librería y su descarga necesitarán tiempo
y supongo que creando las diferentes clases en archivos separados podría también editar archivos individuales (aunque tenga que recompilar todo de nuevo). Y supongo que en velocidad ganará más si todo termina dentro del mismo binario que teniendo que cargar librerías cunado se necesiten...
¿O me equivoco?
Dadme una pista, oh Guruses, antes de que me meta en camisa de once varas y cree algo totalmente infumable ;)
< GNU/Linux y las corporaciones (8 comments) | Otra suite ofimática para Linux (1 comments) >
Enlaces Relacionados
· More on Programación
· Also by runlevel0

Encuesta
¿Prefieres C o C++ ?
· Soy B. Stoustroup, no te resistas, serás asimilado 12%
· C++ RLZ un mazo 10%
· uso C++ y a ratos C 47%
· C++ es para nenazas, C RLZ 9%
· ¿Programar? Ni el video tío. 9%
· Me dá lo mismo uso Perl 4%
· otros 5%

Votos: 91
Resultados | Otras Encuestas

Menu
· crear cuenta
· FAQ
· búsqueda
· Fuentes de Noticias

Login
Nueva cuenta
Usuario:
Contraseña:

Ver: Modo: Orden:
C++ y librerías dinámicas | 1 comentarios (1 temáticos, editoriales, 0 ocultos)
Interfaces más bien que ficheros (none / 0) (#1)
por DopeRider a las Sun Aug 11th, 2002 at 05:29:16 AM CET
(Información Usuario)

Me he pasado recientemente de C a C++.

Felicidades. Cambiar siempre es estimulante. Soy "de familia pascalera". El C lo he usado poquito, y C++ menos. Pero recuerdo mi transición equivalente, cuando pasé de Pascal a Object Pascal (Delphi y Kylix). Quizás te pueda servir de algo.

Se me ocurrió la idea de que para modularizar el código al máximo podría echar mano de la carga dinámica de librerías
[...]
La ventaja que yo le veo es que metiendo mis funciones en libs dinámicas puedo andar metiéndoles mano individualmente sin tener que retocar el resto del código.


Eso no depende de mantener distintos ficheros, sino de mantener constantes unas interfaces. Si mantienes constantes las interfaces entre los módulos, evitas tener que recompilar los módulos clientes cuando recompilas el interior de un módulo que ofrece servicio. Es cuestión de hacer un diseño previo y ceñirse a él.

Lo que sí puede mejorar es la distribución (binaria) de código, o sea en vez de tener que enviar un tocho de programa, poder mandar sólo la parte modificada. Otra razón posible para usar librerías cargables es meter en ellas código usado por varios programas que se ejecutan simultáneamente, disminuyendo el consumo de memoria.

¿Como afecta esto al tamaño del binario, la cantidad de RAM requerida y las prestaciones?

Del tamaño del binario ni idea. La cantidad de RAM ya te decía que se ahorra si hay varios programas que usan a la vez librerías. Y algo debe perderse en tablas de sistema, pero no creo que mucho. Respecto a las prestaciones, hay un coste. Para que se pueda compartir memoria entre programas, el cargador estándar de Linux exige que el código máquina sea PIC (position independent code), o sea que no haga referencia a direcciones absolutas, y así la misma memoria física se proyecta en distintas localizaciones en el espacio de direcciones de distintos procesos (el mismo byte de memoria física puede estar en dos direcciones distintas para dos procesos distintos).

Como curiosidad: el cargador de Windows es más sofisticado en este sentido. Corrige las direcciones absolutas contenidas en una DLL permitiendo código que no sea PIC. La desventaja es que obliga a cargar la DLL en la misma dirección para todos los procesos. Si un proceso la tiene ocupada, tiene que crear una nueva copia física, con lo cual se pierde el ahorro de memoria.

Pero lo hacen por una buena razón: el código PIC es un 20% de media más lento que el código normal.

Evidentemente la carga de la librería y su descarga necesitarán tiempo

No creo que sea mucho, a no ser que te pases todo el programa cargando y descargando, que no creo.

Dadme una pista, oh Guruses, antes de que me meta en camisa de once varas y cree algo totalmente infumable ;)

Pues según lo veo las preguntas son:

  • ¿Voy a tener que distribuir modificaciones de mi programa a través de un medio lento (p.ej. módem).
  • ¿Habrá varios programas corriendo las mismas librerás a la vez y es significativo el ahorro de memoria?. Recuerda la ligera pérdida de velocidad al valorarlo.


Si la respuesta a estas dos preguntas es "no", entonces no le veo la ventaja inmediata a tener el código en librerías dinámicas. Personalmente lo que me gusta es poder compilar todo en cualquier momento desde los fuentes. Claro que Pascal compila muchísimo más rápido que C.

Hay otro objetivo posible para tener código separado en librerías: el tener programas construidos mediante plugins. Pero la tendencia que veo últimamente es a usar más bien un algún lenguaje de guiones cuando se quiere extender un programa. Creo que Guile te debe ser cómodo, quizás no sea mala opción.



 
C++ y librerías dinámicas | 1 comentarios (1 temáticos, editoriales, 0 ocultos)
Ver: Modo: Orden:

ecol Logo Powered by Scoop
Todas las Marcas Registradas y copyrights de esta página son propiedad de sus respectivos dueños.
Los comentarios son propiedad del que los escribe.
Los iconos de las noticias y el logotipo son propiedad de Javier Malonda.
El Resto © 2002 Escomposlinux.org y aledaños.

Puedes sindicar los contenidos de libertonia en formato RSS 1.0 y RDF 0.9. También se puede sindicar la cola de envíos pendientes de moderación.

El proyecto escomposlinux.org está dedicado a la memoria de tas

crear cuenta | faq | búsqueda