Spec-Zone.ru › Elisp

Чистая память

Emacs Lisp использует два типа памяти для объектов Lisp, созданных пользователем: обычную память и чистую память. Обычная память используется для хранения всех новых данных, созданных во время сеанса Emacs (см. Сбор мусора). Чистая память используется для определённых данных в предварительно загруженных стандартных файлах Lisp — данных, которые никогда не должны изменяться во время фактического использования Emacs.

Чистая память выделяется только во время загрузки стандартных предварительно загруженных библиотек Lisp. В файле emacs она помечается как только для чтения (на операционных системах, которые это поддерживают), чтобы пространство памяти можно было совместно использовать всеми процессами Emacs, работающими на машине одновременно. Чистая память не расширяется; фиксированный объем выделяется при компиляции Emacs, и если этого недостаточно для предварительно загруженных библиотек, temacs выделяет динамическую память для части, которая не поместилась. Если Emacs будет сохранён с помощью метода pdump (см. Сборка Emacs), переполнение чистой памяти не имеет особого значения (это просто означает, что некоторые предварительно загруженные данные не могут быть разделены с другими процессами Emacs). Однако, если Emacs будет сохранён с помощью устаревшего метода unexec, полученный образ будет работать, но сбор мусора (см. Сбор мусора) будет отключён в этой ситуации, вызывая утечку памяти. Такое переполнение обычно не произойдёт, если вы не попытаетесь загрузить дополнительные библиотеки или добавить функции к стандартным. Emacs отобразит предупреждение о переполнении при запуске, если он был сохранён с использованием unexec. Если это произойдёт, необходимо увеличить параметр компиляции SYSTEM_PURESIZE_EXTRA в файле src/puresize.h и перекомпилировать Emacs.

Функция: purecopy объект

Эта функция создаёт копию объекта object в чистой памяти и возвращает её. Строка копируется путём создания новой строки с теми же символами, но без свойств текста, в чистой памяти. Она рекурсивно копирует содержимое векторов и ячеек конс. Она не создаёт копии других объектов, таких как символы, а просто возвращает их без изменений. Она сигнализирует об ошибке, если её попросят скопировать маркеры.

Эта функция является пустой операцией, кроме как во время сборки и сохранения Emacs; обычно она вызывается только в предварительно загруженных файлах Lisp.

Переменная: pure-bytes-used

Значение этой переменной — количество байтов чистой памяти, выделенных до настоящего момента. Как правило, в сохранённом Emacs это число очень близко к общему объёму доступной чистой памяти — если бы это не так, мы бы предварительно выделили меньше.

Переменная: purify-flag

Эта переменная определяет, должен ли defun создать копию определения функции в чистой памяти. Если она не nil, то определение функции копируется в чистую память.

Этот флаг t при загрузке всех основных функций для сборки Emacs вначале (разрешая этим функциям быть совмещаемыми и неподлежащими сбору мусора). Сохранение Emacs как исполняемого файла всегда записывает nil в эту переменную независимо от значения, которое она фактически имеет до и после сохранения.

Вы не должны изменять этот флаг в работающем Emacs.

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Pure-Storage.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API