Hola, estoy realizando unas pruebas referentes al uso de librerías dinámicas en Linux (red hat 8) y me he topado con varios problemas; para esta prueba cree 10.000 librerias dinámicas, las cuales se llaman secuencialmente (la "lib1", llama a la "lib2", la "lib2" a la "lib3", etc); y la ultima no llama a ninguna; con lo cual despues de hacer esto la memoria usada por estas llamadas debería eliminarse.
uno.c
{
apertura de libreria dos
llamo a la unica funcion de lib2
cierro libreria
}
dos.c
{
apertura de libreria tres
llamo a la unica funcion de lib3
cierro libreria
}
..............
..............
..............
10000.c
{
apertura de libreria tres
no llamo a ninguna
cierro libreria
}
El problema que tengo es el siguiente ....; cuando llega a la librería 2258, se produce una violacion de segmento ... no tengo idea el motivo.
Hice TOP para ver el comportamiento de la memoria; tras llamar a las 2258 libreriás el valor del campo SIZE de TOP es de 40M; pero si muevo el mouse o hago alguna tarea adicional .. esta funciona (eso me dice q el S.O. todavia tiene memoria necesaria para manejar eso); el ordenador tiene 128MB en RAM y un SWAP de 128MB.
Ahora bien, sabiendo qu e dá problemas SIEMPRE en la librería 2258; lo probé llamando solo a 2000 librerias; y cuando llega a la ultima todo el espacio ocupado en la memoria se libera.
También se me ocurrio q podría ser el tamaño maximo de ficheros abiertos q me permite tener Linux, lo verifque y me dice que es 12.232.
Mi duda es por que se produce la violacion de segmento? alguna idea acerca de esto?
Manejo red hat 8.0