ファイルサイズ制限

もしあなたがGNU Emacsを32ビット以上のサポートされているアーキテクチャでコンパイルしているならば, 最大バッファーサイズを増やせるでしょう. 必要とされるその理由はいわゆる「タグビット」(タグはそれぞれのポインターに対応するデータタイプ)であり. これはElispの中で表すことができる最大整数までバッファーのサイズを制限し、その値はmost-positive-fixnum値によって与えられます. 例えば:

    most-positive-fixnum
    => 268435455

その結果, この特定のシステムではリミットは256MBです:

    (/ 268435456.0 1024 1024)
    => 256.0

私達は結果を計算するために、浮動小数点演算の使用方法に注意してください! いずれにせよ(次のはいくつかの技術的な背景である)EmacsFAQとニュースグループにあるいくつかの投稿に基づく:

GNU Emacs

GNU Emacsの古いバージョン(すなわち, 19.29以前のすべてでは)8メガバイトよりも大きいファイルを編集することに問題を持っています. バージョン19.29では, 最大バッファーサイズは少なくとも2^27-1, すなわち134,217,727 バイトです. 64ビットシステムでは, 制限は2^59-1(約100万テラバイト)まで押し上げられます .

David Gillespie はどうこの問題が不意に現れるか説明する; 彼の番号がGNU Emacsのpre-19.92のみ当てはまる間,現在のバージョンとセオリーは相変わらず同じ. Emacsは主にLispの方言で書かれている;Lispはどんな種類のどんな値もどんな変数に置くことできる,もしくはそれを関数から戻すなどある意味自由に型付けされた言語です. だからそれぞれの値は例えば整数、リストへのポインタ、編集中のバッファーへのポインタなど、それがどんなものであるかを特定するタグに従って運ばなければならない. Emacsはデータオブジェクトのために標準で32ビット整数を使い, 最初から8ビットはタグのためにそして残り24ビットは値のために取る. だから整数(そしてポインタ)は本当のC言語の整数とポインタとやや限定されて比較される. そしてここにさらなる詳細がある:

 From: EliZaretskii
 Subject: Re: maximum buffer size
 Newsgroups: comp.emacs
 Date: Mon, 21 May 2001 19:32:49 +0300

Emacsはそれぞれのバッファーの中でバッファーの位置を追跡することを必要とする. バッファー位置(ポイントとそのilk)を追跡する変数は全てLisp整数でそれは32ビットマシン上では28ビットしか持たない. これが128MB制限の主な理由である. 一方で,プロセスで利用可能な最大仮想メモリー量はOSによって決定され,制限はリソース上利用可能なそれぞれのプロセスのためにそれが課す. VMの制限は直交する可能な値へEmacs整数によって表せる. 例えば, もしそれぞれのバッファーが128MBよりも小さいならば, VMはサポートすることができる利用可能なVMとしてそのようなバッファーをたくさんEmacsは持つことができるはずです. もしあなたのシステムが1.28GB以上のVMを維持するならば、Emacsは10かそれ以上の128MBバッファーを持つことができるはずです.

XEmacs

 Subject: Re: large file aware? 
 From: HrvojeNiksic (edited by AlexSchroeder)
 Date: 13 Oct 1999 15:57:34 +0200 
 Newsgroups: comp.emacs.xemacs 

実際の制限はXEmacs バージョンに依存しLisp整数で制限を課す必要がある. 伝統的には、最も大きいバッファーサイズは 256M(== 2^28; 3 タグビット, 1ビットは 署名のため)であった. XEmacs 21では, XEmacsへ--with-minimal-tagbitsで設定することは可能になった, それはLispで31ビット符号付き整数を得るためにひねくれたトリックを使う. これは2^30=1Gへ最大バッファーサイズをぶつける(私達は1ビットをサインのためまだ必要とする). もしファイルが2Gよりも大きいならば, XEmacsがメモリーでアドレスすることはできなくなるだろう,たとえもしあなたが十分な物理メモリを持っていたとしても. もしあなたが本当に本当にこれらのとてつもなく大きいファイルをXEmacsで編集することを試したいなら, あなたは最新版を得てそれをLP64環境でコンパイルすべきである. その方法であなたは2^62バイトの最大バッファーサイズを得るだろう,そして大きいファイルを自由にサポートを得るだろう. これらのファイルを編集することによって, 幸運を祈る.

それ以上の大きいファイルを見る

ぎこちなく一度に大きなファイルの一部(物理、仮想よりも大きいもしくはパフォーマンスの問題のためにあなたが選んだ制限ならなんでも)観る方法のためにはデカいファイルを観るを見よ


CategoryBuilding