2012-01-30 11 views
12

Tôi đọc về rò rỉ bộ nhớ từ vựng-let của, ví dụ ở đây: Are there any problems with lexical-let or other cl-macros??? - Users list for the GNU Emacs text editor - ArchiveOrangeKhi nào bộ nhớ bị rò rỉ từ vựng của Emacs Lisp?

Nó nói:

"Lưu ý rằng các biến bị ràng buộc với từ vựng-let không bao giờ được phát hành, thậm chí nếu chúng không bao giờ sử dụng Hãy thử

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

và xem nó ăn bộ nhớ. "

Nhưng tôi nghĩ mã này sẽ ăn bộ nhớ chỉ vì danh sách được tạo bởi vòng lặp tăng lên. Vì vậy, tôi đã viết một vài mã elisp để kiểm tra khi nó xảy ra nhưng tôi không thể tìm thấy một ví dụ về rò rỉ.

Đây là cách bộ nhớ tăng theo thời gian khi tôi thực thi mã bên dưới.

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

Dường như không có sự rò rỉ.

Xem thêm ví dụ ở đây: https://gist.github.com/1703325

thêm: Đây là cách ví dụ đầu tiên ăn bộ nhớ. Như tôi đã nói, tôi nghĩ nó là một tạo phẩm.

lambda-in-let.el

+0

FWIW đây là trang lưu trữ ban đầu cho các chủ đề trên 'help-gnu-emacs', không có quảng cáo: http://lists.gnu.org/archive/html/help- gnu-emacs/2010-12/msg00141.html –

+2

[emacs devel] (http://news.gmane.org/gmane.emacs.devel) là một nơi tốt hơn cho loại câu hỏi này so với SO – Tom

+0

Ngoài ra, #emacs channel trên Freenode có thể là một nơi tốt để đặt câu hỏi về loại hình này. – vpit3833

Trả lời

2

tôi chỉ thấy điều này trong emacs-devel:

When does Emacs Lisp's lexical-let leak memory? Vì vậy ... Có đúng, rằng "các biến bị ràng buộc với từ vựng-let không bao giờ phát hành, ngay cả khi họ không bao giờ được sử dụng "?

Không phải là tôi biết. Tất nhiên, mã này không phải là lỗi, nhưng tôi không biết của bất kỳ trường hợp cụ thể nào gặp phải lỗi như vậy.

- Re: lexical-let cause memory leaks?