我读到了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代码来检查它何时发生,但我找不到泄漏的例子。
这是我执行下面代码时内存随时间增长的方式。
(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:这是第一个例子吃内存的方式。正如我所说,我认为这是一件神器。
答案 0 :(得分:2)
我刚在emacs-devel中找到了这个:
When does Emacs Lisp's lexical-let leak memory? 所以...是真的,“与lexical-let绑定的变量永远不会 即使它们从未使用过,也会被释放“?
不是我知道的。当然,这段代码不是没有错误的,但我不知道 碰到这种错误的任何具体案例。