Я читал о лексической утечке памяти, например здесь: Есть ли проблемы с lexical-let или другими cl-макросами ??? - Список пользователей текстового редактора GNU Emacs - ArchiveOrange
Он говорит:
«Обратите внимание, что переменные, связанные с lexical-let, никогда не освобождаются, даже если они никогда не используются. Попробуйте
(цикл для i от 1 до 100000 collect (lexical-let ((x i)) '()))
и наблюдайте, как он пожирает память ».
Но я думаю, что этот код пожирает память только потому, что список, составленный циклом, растет. Итак, я написал несколько кодов elisp, чтобы проверить, когда это происходит, но я не смог найти пример утечки.
Вот так со временем увеличивается объем памяти, когда я выполняю приведенный ниже код.
(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
ДОБАВЛЕНО: Так первый пример пожирает память. Как я уже сказал, я думаю, что это артефакт.