purecopy
사용자 구성 또는 타사 라이브러리에는 필요 하지 않습니다. 사실, 일반적인 Emacs 인스턴스에서 호출 할 때 아무 문제가 없습니다 . 에서 순수 저장 :
이 기능은 Emacs가 빌드되고 덤프되는 동안을 제외하고 는 아무 문제 가 없습니다 . 일반적으로 사전로드 된 Lisp 파일에서만 호출됩니다.
일부 배경 정보는 다음과 같습니다.
순수한 스토리지
이맥스는 2 단계 빌드 프로세스를 가지고 있습니다. 먼저 일반 이진 파일을 빌드 한 다음이 이진 파일을 실행하고 선택된 내장 라이브러리 세트를로드 한 다음 프로세스의 메모리 이미지를 덤프 한 다음 emacs
이 덤프에서 실제 이진 파일을 만듭니다 .
이 복잡한 프로세스의 이유는 성능이 향상되고 메모리 사용량이 적기 때문입니다. 필수 Emacs Lisp 라이브러리를 사전로드하면 내장 라이브러리를로드하는 데 추가 IO가 필요하지 않으며 메모리가 감소하므로 사전로드 된 라이브러리가 있으므로 빠른 시작이 가능합니다. 모든 Emacs 인스턴스간에 공유 할 수 있습니다.
사전로드 된 라이브러리를 포함하는이 특정 메모리 영역은 "순수 스토리지"입니다. 위에서 언급 한 메모리 공유를 허용하는 것은 읽기 전용이므로 "순수"입니다. 따라서 purecopy
일반적인 Emacs 인스턴스에서는 아무 문제가 없습니다. 어쨌든 순수한 스토리지에 쓸 수 없었습니다. 결과적으로 순수한 스토리지도 가비지 콜렉션에서 제외됩니다.
그러나 사전로드 된 라이브러리에 대한 메모리 이미지를 작성하고 덤프하는 동안 이러한 라이브러리를 사용 purecopy
하여 순수 스토리지에 할당 할 특정 오브젝트, 일반적으로 Emacs의 전체 수명에 필요한 자주 사용되는 오브젝트에 "표시" 할 수 있습니다 .
순수한 스토리지의 문자열은 본질적으로 전역 정적 상수 문자열입니다. "make -k"
Emacs 세션을 실행할 때 자주 사용 되기 때문에 (오늘날 가장 자주 사용되는 컴파일 명령 일 수 있음) 불필요한 재배치 및 가비지 수집을 피하기 위해이 문자열을 일정하고 정적으로 유지하는 것이 좋습니다.
순수 저장이 개념은 왜 수정 이유 .el
몇 가지 내장 된 라이브러리 (특히의 파일 startup.el
, subr.el
이맥스는 결코 실제로 하중이 라이브러리의 소스 파일을 : 다른 사람을) 효과가 없습니다. 대신 바이너리 코드에 바이트 코드가 내장되어 있으며 특수 메모리 영역에서로드합니다.