容量の壁
前述のように「Nビットマシン」と呼ばれるコンピュータにおいて、Nが比較的小さいマシンではアドレス空間をNより大きめに取るのが通例であるが、16ビットの8086の場合、物理アドレスを20ビットとして1MiBの空間があった。
しかし8086は、プログラムカウンタ(8086の用語ではインストラクションポインタ)などは16ビットとし、「セグメントレジスタ」と称する用途別(コード・データ・スタック・他)の数本のレジスタの内容を16倍(左に4ビットシフト)した値に、そこからのオフセットとして足し込んで20ビットのアドレスとする、という独特な方式(これは、コンピュータ・アーキテクチャで一般にセグメント方式と呼んでいるものとは全く異なるものであるため、多くの混乱の原因となっているが、Intelはそう名付けた。セグメント方式#x86も参照)とした。この設計は、多くの16ビットアドレスな8ビットプロセッサ用に存在していたプログラムを書き直すには便利な仕様であった反面、8ビット時代じみた「64Kの壁」をしばしば発生させる元凶にもなった。
8086におけるアドレッシングの例:
CS(コードセグメント)レジスタの値: 0x1234
IP(インストラクションポインタ)レジスタの値: 0x0100
このとき、(0x1234 << 4) + 0x0100 == 0x12440 番地が、命令がフェッチされる実アドレスとなる。
32ビットWindowsアプリケーションでは、1プロセスごとの4GiBのアドレス空間うち、カーネルが2GiBを予約しており、アプリケーションが自由に使用可能なのは2GiBである。この壁に達してくるとマイクロソフトは主に2つの対処手段を打ち出した。1つはアドレスウィンドウ化拡張 (AWE)である。4GBを超えるメモリを部分部分で切り替えながら読み書きする方法であり、MS-DOSの頃のEMSのようだという意見もある。もう1つは、4-Gigabyte Tuning (4GT) の導入である。カーネルとアプリケーションのアドレス空間の配分を通常の2GiB-2GiBから、1GiB-3GiBに変更する手法である。カーネルリソースが減少するため、サーバー用途(特にWebサーバー)には安定性の面から向かないという欠点がある。なお、64ビットWindows上では、4GT対応32ビットアプリケーションは4GiBほぼすべてアプリケーションが使用可能である。
PC/AT互換機用MS-DOSのバージョン3では、FAT16のサポートが追加されたにも関わらず、セクター数を16ビットで管理していたため、32MiBを超えるパーティションを扱えない。これはFAT12の制限と同じである。また、ファイルのサイズについても、ファイルテーブル(ディレクトリエントリ)ではMS-DOSの登場当初から32bitのデータが記録できるように設計されていた(すなわち4GiBまで対応可能)が、単一のファイルが複数のパーティションにまたがって記録されることは想定されていなかったため、必然的に、ファイルサイズの上限は32MiBとなる。
なお、NEC PC-9800シリーズや富士通 FM TOWNS用のMS-DOSバージョン3.xでは、OSから見えるセクタサイズは1KiBまたは2KiBとなっており、最大128MiBまでのパーティションを管理することができた。