Emacs Lisp的lexical-let泄密记忆是什么时候?

tkf*_*tkf 12 emacs memory-leaks elisp

我读到了lexical-let的内存泄漏,比如这里: lexical-let或其他cl-macros有什么问题吗? - GNU Emacs文本编辑器的用户列表 - ArchiveOrange

它说:

"请注意,与lexical-let绑定的变量永远不会被释放,即使它们从未被使用过.请尝试

(loop for i from 1 to 100000 collect (lexical-let ((x i)) '()))
Run Code Online (Sandbox Code Playgroud)

看着它吃着记忆."

但我认为这段代码只是因为循环列表增长而占用内存.所以,我写了一些elisp代码来检查它何时发生,但我找不到泄漏的例子.

这就是当我执行下面的代码时内存随时间增长的方式.

λ-在-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))))
Run Code Online (Sandbox Code Playgroud)

看起来没有泄漏.

请在此处查看更多示例:https: //gist.github.com/1703325

ADDED:这是第一个例子吃内存的方式.正如我所说,我认为这是一件神器.

λ-在-let.el

tkf*_*tkf 2

我刚刚在emacs-devel中找到了这个:

Emacs Lisp 的 lexical-let 何时会泄漏内存? 那么...“用 lexical-let 绑定的变量永远不会被释放,即使它们从未被使用”,这是真的吗?

我不知道。当然,这段代码并非没有错误,但我不知道有任何具体案例会遇到这样的错误。

-- Re: lexical-let 导致内存泄漏?