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

@node Question 76

Emacs はなぜ 8 メガバイト以上のファイルを扱えないのですか?

ほとんどのプラットフォームでは, GNU Emacs は 24 ビットの符号付き整数 (そして 24 ビットのポインタ) を 内部で使っています. これが Emacs の扱えるファイル・サイズの制限になっています. すなわち制限は 8,388,607 バイト (2^23 - 1) になります.

Leonard N. Zubkoff <lnz@lucid.com> は 次の 2 行を src/config.h に加えて Emacs をコンパイルすると 26 ビットの整数とポインタが扱えるようになると言っています. これだと 33,554,431 バイトのファイルまで扱うことができます:

  #define VALBITS 26
  #define GCTYPEBITS 5

注意: この方法はいくつかのマシンで `ILLEGAL DATATYPE' エラーになります.

David Gillespie <daveg@csvax.cs.caltech.edu> は Emacs が 24 ビットの整数とポインタを採用した背景を次のように説明しています:

  Emacs はそのほとんどがリスプ方言のひとつで記述されている;
  リスプは, 変数にどんな型の値も代入できたり,
  関数の戻り値も任意の型でよい
  という意味で型が自由な言語だ.
  しかし, このためすべての値には
  その値がどんな型なのかを記す "タグ" が必要なんだ.
  タグには整数, リストへのポインタ, 編集バッファへのポインタなどの
  型が記される.
  Emacs は標準的な整数の幅である 32 ビットをデータ・オブジェクトを指すために
  使っている. そのうち先頭の 8 ビットをこのタグのために使い,
  残りの 24 ビットを値のために使っているんだ.
  だから整数 (そしてポインタ) は C 言語の整数やポインタに比べて
  制限を受けているんだ.
  Emacs はバイト指向強いマシンでの実高速度を気にして, 8 ビットのタグを
  採用しているんだけど, 実は 6 ビットでもタグの幅は十分なのさ.
  ストレージが許すなら,
  (この質問の前半で紹介したように) 6-bit をタグにして
  残りの 26-bit を整数やポインタに割り当てることもできるんだ.

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