purecopy
ไม่เคยต้องการในการกำหนดค่าผู้ใช้หรือห้องสมุดบุคคลที่สาม ในความเป็นจริงมันเป็นno-opเมื่อถูกเรียกจากอินสแตนซ์ Emacs ปกติ จากPure Storage :
ฟังก์ชั่นนี้เป็นไม่มี-op ยกเว้นขณะที่ Emacs จะถูกสร้างขึ้นและทิ้ง ; มันมักจะเรียกว่าเฉพาะในไฟล์เสียงกระเพื่อมที่โหลดไว้แล้ว
ข้อมูลความเป็นมาบางส่วนมีดังนี้
การเก็บรักษาที่บริสุทธิ์
Emacs มีกระบวนการสร้างสองขั้นตอน มันสร้างไบนารีแบบธรรมดาก่อนแล้วจึงเรียกใช้ไบนารีนี้โหลดชุดบิวด์อินที่เลือกไว้จากนั้นemacs
ดัมพ์อิมเมจหน่วยความจำของกระบวนการและสร้างไบนารีจริงจากดัมพ์นี้
เหตุผลสำหรับกระบวนการที่ซับซ้อนนี้คือประสิทธิภาพที่ดีขึ้นและการใช้หน่วยความจำน้อยลง: การโหลดไลบรารี่ Emacs Lisp ที่จำเป็นล่วงหน้าช่วยให้การเริ่มต้นทำงานเร็วขึ้นเนื่องจากไม่จำเป็นต้องใช้ IO เพิ่มเติมในการโหลดไลบรารีในตัวและลดการใช้หน่วยความจำ สามารถแบ่งปันได้ในทุกกรณีของ Emacs
พื้นที่หน่วยความจำเฉพาะนี้ซึ่งมีไลบรารีที่โหลดไว้ล่วงหน้าคือ มันเป็นแบบ "บริสุทธิ์" แบบอ่านอย่างเดียวดังนั้นจึงอนุญาตให้แชร์หน่วยความจำดังกล่าวข้างต้น ดังนั้นจึงpurecopy
ไม่มีตัวเลือกในอินสแตนซ์ของ Emacs ปกติ: มันไม่สามารถเขียนลงในที่เก็บข้อมูลจริงได้ ดังนั้นการจัดเก็บที่บริสุทธิ์ยังได้รับการยกเว้นจากการเก็บขยะ
อย่างไรก็ตามในขณะที่สร้างและทิ้งอิมเมจหน่วยความจำสำหรับไลบรารีที่โหลดไว้แล้วไลบรารีเหล่านี้สามารถใช้purecopy
เพื่อ "ทำเครื่องหมาย" วัตถุเฉพาะสำหรับการจัดสรรในที่เก็บข้อมูลแท้โดยปกติแล้ววัตถุที่ใช้บ่อยซึ่งจำเป็นสำหรับตลอดชีวิตของ Emacs อยู่แล้ว
สตริงในที่เก็บข้อมูลบริสุทธิ์เป็นสตริงคงที่ทั่วโลกเป็นหลัก เนื่องจาก"make -k"
จะมีการใช้งานบ่อยครั้งในการเรียกใช้เซสชันของ Emacs (เป็นไปได้ว่าคำสั่งการรวบรวมที่ใช้บ่อยที่สุดแม้ในทุกวันนี้) มันสมเหตุสมผลที่จะทำให้สตริงนี้คงที่และคงที่เพื่อหลีกเลี่ยงการจัดสรรใหม่และการรวบรวมขยะ
แนวคิดของการจัดเก็บข้อมูลที่บริสุทธิ์และนี่ก็เป็นเหตุผลที่ว่าทำไมการปรับเปลี่ยน.el
ไฟล์บางตัวในห้องสมุด (สะดุดตาstartup.el
, subr.el
และอื่น ๆ ) ไม่มีผล: Emacs โหลดไม่จริงแฟ้มแหล่งที่มาของห้องสมุดเหล่านี้ แต่จะมีรหัสไบต์อยู่ในไบนารีและโหลดจากพื้นที่หน่วยความจำพิเศษ