2012-01-30 3 views
12

Я читал об утечке памяти лексико-LET, например здесь: Are there any problems with lexical-let or other cl-macros??? - Users list for the GNU Emacs text editor - ArchiveOrangeКогда происходит лексико-утечка памяти Emacs Lisp?

Он говорит:

«Обратите внимание, что переменные, связанные с лексической пусть никогда не выпустили, даже , если они никогда не используются . Попробуйте

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

и смотреть, как он ест память. "

Но я думаю, что этот код ест память только потому, что список, созданный по циклу, растет. Итак, я написал несколько кодов elisp, чтобы проверить, когда это произойдет, но я не смог найти пример утечки.

Это то, как память растет со временем, когда я выполняю приведенный ниже код.

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

Похоже, что нет утечки.

Другие примеры здесь: https://gist.github.com/1703325

ADDED: Это как первый пример ест память. Как я уже сказал, я думаю, что это артефакт.

lambda-in-let.el

+0

FWIW здесь исходный архив страницы для потока на 'Справка-Гну-emacs', без рекламы: http://lists.gnu.org/archive/html/help- gnu-emacs/2010-12/msg00141.html –

+2

[emacs devel] (http://news.gmane.org/gmane.emacs.devel) - лучшее место для такого вопроса, кроме SO – Tom

+0

Также канал #emacs на Freenode может быть хорошим местом, чтобы задать вопрос такого рода. – vpit3833

ответ

2

Я только что нашел это в emacs-devel:

When does Emacs Lisp's lexical-let leak memory? Так ... Это правда, что «переменные, связанные с лексической пусть никогда не отпущена, даже если они никогда не используются "?

Не знаю, что знаю. Конечно, этот код не является ошибкой, но я не знаю любого конкретного случая, который сталкивается с такой ошибкой.

- Re: lexical-let cause memory leaks?