purecopy
nunca se necesita en la configuración del usuario o en bibliotecas de terceros. De hecho, es un no-op cuando se llama desde una instancia normal de Emacs. De Pure Storage :
Esta función es no operativa, excepto mientras Emacs se está construyendo y volcando ; generalmente se llama solo en archivos Lisp precargados.
A continuación se incluye información básica.
Puro almacenamiento
Emacs tiene un proceso de compilación de dos etapas. Primero construye un binario simple, y luego ejecuta este binario, carga un conjunto seleccionado de bibliotecas integradas, y luego volca una imagen de memoria del proceso, y crea el emacs
binario real a partir de este volcado.
Las razones de este complicado proceso son un mejor rendimiento y un menor uso de memoria: la precarga de las bibliotecas esenciales de Emacs Lisp permite un inicio más rápido, ya que no se requieren más E / S para cargar las bibliotecas integradas y disminuye el uso de la memoria, ya que las bibliotecas precargadas se puede compartir entre todas las instancias de Emacs.
Esta área de memoria particular que contiene las bibliotecas precargadas es el "almacenamiento puro". Es de solo lectura, por lo tanto, "puro", para permitir el intercambio de memoria mencionado anteriormente. Por lo tanto, purecopy
es un no-op en instancias normales de Emacs: de todos modos, no podría escribir en almacenamiento puro. En consecuencia, el almacenamiento puro también está exento de la recolección de basura.
Sin embargo, al crear y volcar la imagen de memoria para bibliotecas precargadas, estas bibliotecas se pueden usar purecopy
para "marcar" objetos específicos para la asignación en almacenamiento puro, de todos modos, los objetos que se usan con frecuencia son necesarios para toda la vida útil de Emacs.
Las cadenas en almacenamiento puro son esencialmente cadenas constantes estáticas globales. Dado "make -k"
que se usará con frecuencia para ejecutar sesiones de Emacs (es probable que sea el comando de compilación más utilizado, incluso hoy en día), tiene sentido mantener esta cadena constante y estática, para evitar la reasignación innecesaria y la recolección de basura.
Este concepto de almacenamiento puro es también la razón por la modificación de los .el
archivos de algunos (en particular incorporados en las bibliotecas startup.el
, subr.el
y otros) no tiene ningún efecto: Emacs en realidad nunca las cargas de los archivos de origen de estas bibliotecas. En cambio, tiene su código de bytes integrado en su binario, y los carga desde un área de memoria especial.