2012-01-30 7 views
12

Ho letto sulla perdita di memoria del lessico-let, per esempio qui: Are there any problems with lexical-let or other cl-macros??? - Users list for the GNU Emacs text editor - ArchiveOrangeQuand'è che la memoria di perdita di permessi lessicali di Emacs Lisp?

Dice:

"Si noti che le variabili legate con lessicale-let non vengono mai rilasciati, anche se non vengono mai utilizzate Prova

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

e guardalo mangiare ".

Ma penso che questo codice mangia memoria solo perché la lista fatta da loop cresce. Quindi, ho scritto alcuni codici elisp per verificare quando si verifica ma non sono riuscito a trovare un esempio della perdita.

Ecco come la memoria cresce con il tempo quando eseguo il codice qui sotto.

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

sembra che non ci siano perdite.

Vedi altri esempi qui: https://gist.github.com/1703325

aggiunto: Questo è come il primo esempio mangia memoria. Come ho detto, penso che sia un artefatto.

lambda-in-let.el

+0

FWIW qui è la pagina di archivio originale per il filo sul 'help-gnu-emacs', senza pubblicità: http://lists.gnu.org/archive/html/help- gnu-emacs/2010-12/msg00141.html –

+2

[emacs devel] (http://news.gmane.org/gmane.emacs.devel) è un posto migliore per questo tipo di domande rispetto a SO – Tom

+0

Inoltre, il canale #emacs su Freenode potrebbe essere un buon posto per fare una domanda di questo tipo. – vpit3833

risposta