purecopy
không bao giờ cần thiết trong cấu hình người dùng hoặc thư viện bên thứ 3. Trong thực tế, nó là một no-op khi được gọi từ một cá thể Emacs bình thường. Từ lưu trữ tinh khiết :
Chức năng này là không hoạt động trừ khi Emacs đang được xây dựng và kết xuất ; nó thường chỉ được gọi trong các tệp Lisp được tải sẵn.
Một số thông tin cơ bản sau.
Lưu trữ tinh khiết
Emacs có một quá trình xây dựng hai giai đoạn. Đầu tiên, nó xây dựng một nhị phân đơn giản, sau đó chạy nhị phân này, tải một tập hợp các thư viện tích hợp đã chọn và sau đó kết xuất một hình ảnh bộ nhớ của quá trình và tạo emacs
nhị phân thực từ kết xuất này.
Lý do cho quá trình phức tạp này là hiệu suất tốt hơn và sử dụng ít bộ nhớ hơn: Tải trước thư viện Emacs thiết yếu cho phép khởi động nhanh hơn, vì không cần IO nữa để tải thư viện tích hợp và giảm sử dụng bộ nhớ, vì các thư viện được tải sẵn có thể được chia sẻ giữa tất cả các trường hợp Emacs.
Vùng nhớ đặc biệt này chứa các thư viện được tải sẵn là kho lưu trữ thuần túy. Đó là chỉ đọc, do đó, tinh khiết, cho phép chia sẻ bộ nhớ đã nói ở trên. Do đó, purecopy
không có op trong các trường hợp Emacs bình thường: Dù sao nó cũng không thể ghi vào bộ lưu trữ thuần túy. Do đó, lưu trữ tinh khiết cũng được miễn thu gom rác.
Tuy nhiên, trong khi tạo và kết xuất hình ảnh bộ nhớ cho các thư viện được tải sẵn, các thư viện này có thể sử dụng purecopy
để đánh dấu các đối tượng cụ thể của Wap mark để phân bổ trong bộ lưu trữ thuần túy, thường là các đối tượng thường được sử dụng cần thiết cho toàn bộ thời gian của Emacs.
Các chuỗi trong lưu trữ thuần túy là các chuỗi hằng tĩnh tĩnh toàn cầu. Vì "make -k"
sẽ được sử dụng thường xuyên trong việc chạy các phiên Emacs (có thể là lệnh biên dịch được sử dụng thường xuyên nhất, ngay cả ngày nay), nên giữ cho chuỗi này không đổi và tĩnh, để tránh phân bổ lại và thu gom rác không cần thiết.
Khái niệm về lưu trữ tinh khiết cũng là lý do tại sao thay đổi các .el
file của một số được xây dựng trong thư viện (đặc biệt startup.el
, subr.el
và những người khác) không có tác dụng: Emacs không bao giờ thực sự tải các tập tin nguồn của các thư viện này. Thay vào đó, nó có mã byte được tích hợp vào nhị phân của nó và tải chúng từ một vùng nhớ đặc biệt.