2010-11-16 3 views
5

J'ai besoin de savoir, à partir d'un programme Common Lisp, quelle quantité de mémoire est actuellement utilisée.Utilisation actuelle de la mémoire en Lisp

Je dois comprendre qu'il n'y a pas de méthode portable (la fonction standard room imprime l'information à la sortie standard sous forme de texte au lieu de la renvoyer comme une valeur), mais sb-kernel:dynamic-usage fonctionne dans SBCL. Quels sont les équivalents dans d'autres implémentations Common Lisp?

Ou y a-t-il une autre façon de résoudre ce problème que je devrais regarder?

Répondre

10

Il ne peut pas vous aider beaucoup, mais de toute façon:

Vous pouvez capturer la sortie (salle) et l'analyser.

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

Ci-dessus renvoie une chaîne avec la sortie de ROOM.

De plus, il peut être utile de demander la taille de la mémoire du processus via un appel externe à une commande unix standard (si vous utilisez Unix).

4

Pour les choses que pratiquement chaque implémentation prend en charge, mais pas de la même manière (parce qu'elle n'est pas en CL), une approche courante consiste à faire une bibliothèque appelée trivial-.

Si vous avez commencé un paquet comme trivial-memory, et fourni la première implémentation, je suis sûr que nous pourrions amener tout le monde à contribuer à la fonction de leur propre compilateur Lisp préféré en peu de temps. :-)

+0

Je pourrais certainement créer un paquet trivial-memory sur github, et remplir les cas que je connais. Vous semblez optimiste quant aux chances d'obtenir des contributions :-) Connaissez-vous un endroit approprié pour annoncer ces choses, ou y a-t-il un autre aspect de la communauté Lisp que vous avez en tête que je ne connais pas? – rwallace

+1

Je suis seulement optimiste parce qu'il semble que juste un petit appel de fonction, chacun, vous devez obtenir. :-) Si j'essayais d'obtenir quelque chose comme ça annoncé, j'essaierais d'en parler à Xach, ce qui veut dire que ça arrivera sur planet.lisp.org. S'il y a une ou deux implémentations communes auxquelles vous ne pouvez pas obtenir de réponses, vous pouvez toujours poster une question spécifique à ce sujet ici sur S.O. Bonne chance! – Ken