|
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.
|