Go to the first, previous, next, last section, table of contents.

pureストレージ

GNU Emacs Lisp には、ユーザーの作る Lisp オブジェクト用に normal ストレージ と pure ストレージの 2種類のストレージが存在しています。normal ストレージは Emacs の各セッションで作られた新しいオブジェクト(の全て)を保持する領域です。 プログラムが cons でリストを作ったり、ユーザーが新しい関数を定義したり (パッ ケージをロードした)場合、それらは normal ストレージに置かれます。

normal ストレージでの実行が遅くなった場合、Emacs は OS にそれ以上のメモリを 1k バイトのブロックでアロケートするよう要求します。アロケートされたブロックは(そ れぞれ)ある 1種類のタイプ用に用いられます。つまり、シンボル、コンス、ベクト ル、等はメモリ中の異なるブロックに分けられることになります。

(ユーザー変数 gc-cons-threshold で決められる) ある量のストレージがアロケートさ れた後、放棄されたストレージの全てを集めるため、ガベージコレクタが呼ばれます。

pure ストレージは、使いっぱなしにされる(訳注:expandable) 、ガベージコレクタで 集められないという点と、 sharable である(2人の人ば Emacs を走らせている場合、 Emacs の全ての共有可能な部分はその同じメモリを共有させることを OS が選ぶことが できる)という点でユニークです。

本質的に、pure ストレージは最初にソースから Emacs を作り、だれもが求める通常の ファイルの全てをロードする時、用いられます。 normal ストレージは Emacs におけ るセッション中に用いられます。

Function: purecopy object

この関数は、 pure ストレージ中の object のコピーを作り、それを返します。こ れは pure ストレージ中の文字と同じ文字を持つストリングをただ(新しく)作るこ とでストリングのコピーを行ないます。これはベクトルとコンスセルの内容をリ カーシブにコピーします。

シンボルやその他のオブジェクトのコピーは行なわず、それらはそのまま返しま す。マーカーをコピーするよう要求すると、エラーを出し(訳注:signal)ます。こ の関数は Emacs が作られダンプされる時のみ、用いられます。

Variable: pure-byte-used

この変数の値は、これまでアロケートされた pure ストレージのバイト数です。 セッション中、この数は存在する pure ストレージの総量に非常に近くなります。

Variable: purify-flag

この変数は、defun が pure ストレージに関数定義のコピーを作るべきか否かを定 めます。 non-nil の場合、関数定義は pure ストレージにコピーされます。

最初 Emacs を作るため(全ての)基本関数をロードする間、このフラグは t で、こ れらの関数を share 可能で non-collectable であるようにします。 Emacs が実 行可能なプログラムのセーブを終了した時、これは nil に設定されます。

pure ストレージ用にアロケートされた有限の量の領域が存在し、この量は Emacs

を作る際に通常ロードされる関数の数に依存します。 Emacs の走行中にこのフラ グを変更してはいけません。


Go to the first, previous, next, last section, table of contents.