purecopy
nigdy nie potrzebne w konfiguracji użytkownika lub bibliotekach stron trzecich. W rzeczywistości jest to brak możliwości połączenia z normalną instancją Emacsa. Z czystego przechowywania :
Ta funkcja nie działa, z wyjątkiem sytuacji, gdy Emacs jest budowany i zrzucany ; zwykle jest wywoływany tylko we wstępnie załadowanych plikach Lisp.
Poniżej podano niektóre informacje ogólne.
Czyste przechowywanie
Emacs ma dwustopniowy proces kompilacji. Najpierw buduje zwykły plik binarny, a następnie uruchamia ten plik binarny, ładuje wybrany zestaw wbudowanych bibliotek, a następnie zrzuca obraz pamięci procesu i tworzy prawdziwy emacs
plik binarny z tego zrzutu.
Powodem tego zawiłego procesu jest lepsza wydajność i mniejsze zużycie pamięci: Wstępne ładowanie niezbędnych bibliotek Emacs Lisp pozwala na szybsze uruchomienie, ponieważ nie jest wymagane dalsze IO do ładowania bibliotek wbudowanych i zmniejsza zużycie pamięci, ponieważ wstępnie załadowane biblioteki mogą być współużytkowane przez wszystkie instancje Emacsa.
Ten szczególny obszar pamięci, który zawiera wstępnie załadowane biblioteki, to „czysta pamięć”. To tylko do odczytu, stąd „czyste”, aby umożliwić wspomniane współużytkowanie pamięci. Stąd purecopy
brak możliwości w normalnych instancjach Emacsa: i tak nie można zapisać w czystej pamięci. W związku z tym czyste przechowywanie jest również zwolnione z wyrzucania elementów bezużytecznych.
Jednak podczas tworzenia i zrzucania obrazu pamięci dla wstępnie załadowanych bibliotek, biblioteki te mogą używać purecopy
do „oznaczania” określonych obiektów do alokacji w czystej pamięci, zwykle często używanych obiektów, które są potrzebne przez cały okres życia Emacsa.
Ciągi w czystym magazynie są zasadniczo ciągami globalnymi stałymi statycznymi. Ponieważ "make -k"
będzie często używany podczas uruchamiania sesji Emacsa (prawdopodobnie jest to najczęściej używane polecenie kompilacji, nawet dzisiaj), sensowne jest utrzymywanie tego łańcucha na stałym poziomie, aby uniknąć niepotrzebnego ponownego przydzielania i wyrzucania elementów bezużytecznych.
Ta koncepcja czystej pamięci jest również powód, modyfikując .el
pliki niektórych wbudowanych bibliotek (w szczególności startup.el
, subr.el
i inne) nie ma wpływu: Emacs nigdy nie ładuje pliki źródłowe tych bibliotek. Zamiast tego ma wbudowany kod binarny w swoim pliku binarnym i ładuje je ze specjalnego obszaru pamięci.