2012-01-30 11 views
12

Czytałem o wycieku pamięci leksykalno-Powiedzmy, na przykład tutaj: Are there any problems with lexical-let or other cl-macros??? - Users list for the GNU Emacs text editor - ArchiveOrangeKiedy pamięć wycieku leksykonu Emacsa Lispa?

Mówi:

„Zauważ, że zmienne związane z leksykalnego-let nie są zwolnione, nawet jeśli są one nigdy używane Wypróbuj

i zobacz, jak je pamięć. "

Ale myślę, że ten kod zjada pamięć tylko dlatego, że lista tworzona przez pętlę rośnie. Napisałem kilka kodów, aby sprawdzić, kiedy to nastąpi, ale nie mogłem znaleźć przykładu wycieku.

W ten sposób rośnie pamięć z czasem, kiedy wykonuję poniższy kod.

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

Wygląda na to, nie ma nieszczelności.

Zobacz więcej przykładów tutaj: https://gist.github.com/1703325

dodał: To jest jak pierwszy przykład zjada pamięć. Jak już powiedziałem, myślę, że to artefakt.

lambda-in-let.el

+0

FWIW tutaj jest oryginalna strona archiwum do wątku na 'help-gnu-emacs', bez reklam: http://lists.gnu.org/archive/html/help- gnu-emacs/2010-12/msg00141.html –

+2

[emacs devel] (http://news.gmane.org/gmane.emacs.devel) jest lepszym miejscem dla tego rodzaju pytań niż SO – Tom

+0

Również kanał #emacs na Freenode może być dobrym miejscem do zadawania takich pytań. – vpit3833

Odpowiedz