2010-11-16 16 views
5

Necesito averiguar, dentro de un programa Common Lisp, cuánta memoria está siendo utilizada actualmente.Uso de memoria actual en Lisp

Me dieron a entender que no hay un método portátil (la función estándar room imprime la información a la salida estándar en forma de texto en lugar de devolverlo como un valor), pero sb-kernel:dynamic-usage funciona en SBCL.

¿Cuáles son los equivalentes en otras implementaciones de Common Lisp? ¿O hay otra forma de resolver este problema que debería estar mirando?

Respuesta

10

No se puede ayudar mucho, pero de todos modos:

Puede capturar la salida de (ambiente) y analizarlo.

(with-output-to-string (*standard-output*) 
    (room)) 

Above devuelve una cadena con la salida de ROOM.

Además, puede ser útil solicitar el tamaño de la memoria del proceso a través de una llamada externa a un comando estándar de Unix (si está en Unix).

4

Para cosas que prácticamente todas las implementaciones admiten, pero no de la misma manera (porque no está en CL), un enfoque común es crear una biblioteca llamada trivial- cualquiera.

Si inició un paquete como trivial-memory, y proporcionó la primera implementación, estoy seguro de que podríamos hacer que todos contribuyan la función de su propio compilador Lisp en poco tiempo. :-)

+0

Podría ciertamente crear un paquete de memoria trivial en github, y completar los casos que conozco. Pareces optimista sobre las perspectivas de obtener contribuciones :-) ¿conoces un lugar apropiado para anunciar estas cosas, o hay algún otro aspecto de la comunidad Lisp que tienes en mente con el que no estoy familiarizado? – rwallace

+1

Solo soy optimista porque parece que solo se necesita una pequeña llamada de función, cada una de ellas. :-) Si estaba intentando que se anunciara algo así, podría intentar que Xach publicara un blog sobre él, lo que significa que se publicará en planet.lisp.org. Si hay una o dos implementaciones comunes a las que no puede obtener respuestas, siempre puede publicar una pregunta específica aquí en S.O. también. ¡Buena suerte! – Ken