2012-01-30 16 views
12

leí sobre pérdida de memoria del léxico-let, por ejemplo aquí: Are there any problems with lexical-let or other cl-macros??? - Users list for the GNU Emacs text editor - ArchiveOrange¿Cuándo se filtra la memoria lexical de Emacs Lisp?

Dice:

"Tenga en cuenta que las variables atadas con léxico-let nunca son puestos en libertad, incluso si son nunca utilizado . Pruebe

(loop for i from 1 to 100000 collect (lexical-let ((x i)) '())) 

y mire cómo se come la memoria ".

Pero creo que este código come memoria solo porque la lista creada por loop crece. Entonces, escribí algunos códigos elisp para verificar cuándo ocurre, pero no pude encontrar un ejemplo de la fuga.

Así es como la memoria crece con el tiempo cuando ejecuto el siguiente código.

lambda-in-let.el

(require 'cl) 

(defvar num-loop-1 30) 
(defvar num-loop-2 100000) 

(loop for i from 1 to num-loop-1 do 
     (loop for j from 1 to num-loop-2 collect 
      (lexical-let ((x `(,i ,j))) (lambda() x)))) 

Parece que no hay ninguna fuga.

Ver más ejemplos aquí: https://gist.github.com/1703325

añadido: Así es como el primer ejemplo se come la memoria. Como dije, creo que es un artefacto.

lambda-in-let.el

+0

Fwiw aquí es la página original del archivo para el hilo de'ayuda-gnu-emacs', sin anuncios: http://lists.gnu.org/archive/html/help- gnu-emacs/2010-12/msg00141.html –

+2

[emacs devel] (http://news.gmane.org/gmane.emacs.devel) es un lugar mejor para este tipo de pregunta que SO – Tom

+0

Además, #emacs channel en Freenode podría ser un buen lugar para hacer una pregunta de este tipo. – vpit3833

Respuesta

Cuestiones relacionadas