Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 4 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Mayor
Forista Mayor
Avatar de Usuario

Registrado: Lun Feb 26, 2007 12:00 am
Mensajes: 998
Ubicación: Guadalajara, Jalisco. Mexico

Nota Publicado: Dom Sep 26, 2010 7:34 pm 
Arriba  
Saludos Colegas Linuxeros.

Este dia les vengo con otra de mis dudas.

Estoy trabajando con una aplicacion que, en sus "mejores" momentos, puede llegar a consumir desde unos pocos bytes hasta varios GB en RAM (no, no es un virus ni malware). Bien, este comportamiento no me preocupa pues asi tiene que funcionar, lo que me preocupa es que tengo que implementar en el mismo que detecte cuanta RAM hay, y, si no hay suficiente, que se pase a modo "lento pero ahorrativo", donde genera un archivo temporal en vez de RAM (de iguales dimensiones, por eso es lento).

Bien, para ir reservando memoria, utilizo malloc, y, segun tengo entendido, cuando ya no hay memoria, malloc se pone de malas y retorna NULL en el apuntador, lo cual me deberia de dar pie a detectar cuando el programa se ha quedado sin RAM y comenzar a liberar la ya reservada. El proplema es que eso es en teoria, pues cuando mi aplicacion pide mas de lo que hay, el sistema lo mata.

Bien, la idea es que el programa, antes de iniciar con su orgia de RAM, ya sabe de antemano cuanto va a necesitar. Sin embargo, no tengo modo de saber cuanta RAM hay. He estado buscando soluciones, y me encuentro con el comando free, por ejemplo, el cual da la informacion que necesito, dice exactamente lo que necesito, cuanto hay, cuanto libre, cuanto usado. Sin embargo, es un comando...

Tambien esta la opcion de abrir y leer cierto archivo, que, se supone, es lo que hace free, y contiene estos datos y muchos mas. Estos dos no me deberian ser una alternativa real, o al menos no ser una primera opcion, pues lo que busco es un comando o serie de comandos para C/C++ que me permitan saber eso de manera nativa en Linux, sin necesidad de tener que ejecutar un comando, guardad su salida a un archivo y leerlo posteriormente, y tampoco me es muy grata la idea de leer un archivo de sistema directamente, pues desconozco si se este actualizando con el tiempo, y no quiero que haya errores (la aplicacion debe de ser tan tolerante a errores como sea posible).

Estare haciendo pruebas para ver que resultados obtengo con el comando free, pero quisiera poder usar comandos de C/C++...

Saludos.

_________________
Edita los nombres de tus post con "[SOLUCIONADO]" cuando encuentres una solución a tu problema.

Lenovo G470.
Intel Core i3 2.1 GHz (2310M).
Fedora GNU/Linux.

 Perfil Email WWW  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 12:00 am
Mensajes: 1361
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Lun Sep 27, 2010 2:31 am 
Arriba  
Me extraña que el sistema mate a tu proceso cuando debería devolverte un null. No obstante, es posible que una de las políticas de SO para liberar memoria en esos casos sea matar al proceso que consume más memoria (para liberar más espacio).

Si lo estás haciendo para linux puedes revisar el fichero /proc/meminfo para obtener información de la memoria, entre la que está la cantidad de memoria total y la libre.

De todas formas, creo que esto te puede servir, si es que está en el lenguaje que quieres...
http://support.hyperic.com/display/SIGAR/Home#Home-download

_________________
Descargue el gestor de mp3 "Music Manager" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)

 Perfil  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mié Jun 16, 2010 9:23 pm
Mensajes: 355
Ubicación: Venezuela

Nota Publicado: Lun Sep 27, 2010 11:43 am 
Arriba  
Este script en python:

http://www.pixelbeat.org/scripts/ps_mem.py

permite descriminar la cantidad de memoria RAM usada por programa. Podrías ver si es lo que necesitas y lo adaptas a C (o lo llamas desde C para que se ejecute; me imagino que se puede). Por otra parte, no tienes por qué esperar a que el programa se quede sin RAM para que el sistema te mate el proceso. Define una tolerancia aceptable, por ejemplo, 97 o 98 % y desde allí lo pasas a ese modo lento.

_________________
[Reglamento del foro] [Blog]

 Perfil Email  

Desconectado
Forista Mayor
Forista Mayor
Avatar de Usuario

Registrado: Lun Feb 26, 2007 12:00 am
Mensajes: 998
Ubicación: Guadalajara, Jalisco. Mexico

Nota Publicado: Lun Sep 27, 2010 12:54 pm 
Arriba  
OK, checare las opciones, gracias :D

_________________
Edita los nombres de tus post con "[SOLUCIONADO]" cuando encuentres una solución a tu problema.

Lenovo G470.
Intel Core i3 2.1 GHz (2310M).
Fedora GNU/Linux.

 Perfil Email WWW  
Mostrar mensajes previos:  Ordenar por  
 [ 4 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC - 6 horas
Traducción al español por Huan Manwë
phpBB SEO