purecopy
mai necessario nella configurazione dell'utente o nelle librerie di terze parti. In realtà, è una no-op quando chiamato da una normale istanza di Emacs. Da Pure Storage :
Questa funzione è no-op tranne quando Emacs viene creato e scaricato ; di solito viene chiamato solo nei file Lisp precaricati.
Di seguito alcune informazioni di base.
Conservazione pura
Emacs ha un processo di costruzione in due fasi. Crea prima un semplice binario, quindi esegue questo binario, carica un set selezionato di librerie integrate, quindi scarica un'immagine di memoria del processo e crea il vero emacs
binario da questo dump.
Le ragioni di questo complicato processo sono le prestazioni migliori e il minor utilizzo della memoria: il pre-caricamento delle librerie Emacs Lisp essenziali consente un avvio più rapido, poiché non sono necessari ulteriori IO per caricare le librerie integrate e riduce l'utilizzo della memoria, poiché le librerie precaricate può essere condiviso tra tutte le istanze di Emacs.
Questa particolare area di memoria che contiene le librerie precaricate è la "memoria pura". È di sola lettura, quindi "puro", consentire la suddetta condivisione della memoria. Quindi, purecopy
è una no-op nelle normali istanze di Emacs: non può comunque scrivere nella memoria pura. Di conseguenza, anche l'archiviazione pura è esente dalla raccolta dei rifiuti.
Tuttavia, durante la creazione e il dumping dell'immagine di memoria per le librerie precaricate, queste librerie possono essere utilizzate purecopy
per "contrassegnare" oggetti specifici per l'allocazione nella memoria pura, in genere oggetti utilizzati di frequente che sono comunque necessari per l'intera vita di Emacs.
Le stringhe nella memoria pura sono essenzialmente stringhe costanti statiche globali. Poiché "make -k"
verrà utilizzato frequentemente durante l'esecuzione delle sessioni di Emacs (è probabilmente il comando di compilazione più frequentemente utilizzato, anche oggi), ha senso mantenere questa stringa costante e statica, per evitare inutili riassegnazioni e garbage collection.
Questo concetto di archiviazione puro è anche il motivo per cui la modifica dei .el
file di alcuni (in particolare incorporati nelle biblioteche startup.el
, subr.el
e altri) non ha alcun effetto: Emacs realtà mai carichi i file di origine di queste librerie. Invece, ha il suo codice byte incorporato nel suo binario e li carica da un'area di memoria speciale.