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

时间:2012-01-30 10:40:09

标签: emacs memory-leaks elisp

我读到了lexical-let的内存泄漏,例如: Are there any problems with lexical-let or other cl-macros??? - Users list for the GNU Emacs text editor - ArchiveOrange

它说:

  

“请注意,与lexical-let绑定的变量永远不会被释放   如果他们从未使用过。尝试

(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

1 个答案:

答案 0 :(得分:2)

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

  
    

When does Emacs Lisp's lexical-let leak memory?     所以...是真的,“与lexical-let绑定的变量永远不会     即使它们从未使用过,也会被释放“?

  
     

不是我知道的。当然,这段代码不是没有错误的,但我不知道   碰到这种错误的任何具体案例。

     

- Re: lexical-let cause memory leaks?