
ポインタはメモリ アドレスを格納するため、そのサイズはメモリ アドレスのサイズであり、メモリ位置の数に依存します。一方、ワード サイズは命令が機能できる最大の単位です。したがって、メモリ位置のサイズは無関係であり、一度に複数のメモリ位置を収集できます。では、ワード サイズとポインタ サイズの関係は何でしょうか。
答え1
これらは同じである必要はなく、同じでないコンピュータ システムの数は、同じであるコンピュータ システムの数をはるかに上回ります。それでも、ポインタ サイズと「ワード」 サイズの間にはいくつかの関係があります。
プログラムは、ポインタ演算を大量に実行します。配列の添え字は、ポインタの追加です。ポインタは互いに比較されます。CPU がポインタのサイズの演算を実行できない場合、アドレスを複数の変数に分割する必要があり、その結果、セグメント化されたアドレス空間またはバンク化されたアドレス空間が発生します。これらは管理が複雑で、ポインタのような型 (ニア ポインタ、ファー ポインタ、ベース ポインタ) が急増します。その結果、リンク リストが配列よりも多くの項目を保持できるなど、奇妙な制限が追加されます。
それでも、8 ビット データ バスとより大きなアドレス空間 (おそらくデータではなくコードのみ) を備えたマイクロコントローラは一般的です。逆に、32 ビットまたは 64 ビット ポインタを備えた最新の汎用 CPU は、ポインタよりもはるかに広いデータ ワードを備えています (たとえば、最新の x86_64 CPU の AVX サブシステムでは 512 ビット データ ワード)。多くのロックフリー アルゴリズムは、ポインタの 2 倍以上のサイズのデータへのアトミック アクセスに依存しています。
答え2
TLDR: おそらく偶然でしょう。
ポインタは、コンピュータ アーキテクチャ自体の一部ではなく、プログラミング言語の機能です。たとえば、Windows API は独自のポインタの種類とその大きさを定義します。Windows 上の C では、char ( char*
) へのポインタは、バージョンに応じて 32 ビットから 64 ビットの間で変化します。ワードのサイズは、これとほとんど関係ない可能性があります。
言葉非常に多用される言葉です。CPUアーキテクチャでは、ワードは命令のサイズ、データバス、メモリバスなどを指します。Windows APIワードはunsigned short、つまり少なくとも2 バイトなので、short の実装方法によって異なります。
MS ワードと命令サイズ ワードの間には相関関係があるかもしれませんが、それを議論するには OS 開発者が必要だと思いますし、それがポインタのサイズに影響を与えるとは思えません。
答え3
かつて、コンピュータのレジスタと内部バスは4ビットから8ビット、16ビット、32ビット、そして現在は64ビットへと進化してきました。最大アドレス空間はポインタのサイズに依存します(ただし、Z80Aなどの初期のCPUでは、ページポインタのサイズのチャンク単位でメモリに格納されます。
バスが広くなるにつれて、RAMを増やすことも望ましくなり、ポインタのサイズも大きくなりました。しかし、OSがバスの拡大に追いつけないこともありました。例えば、Windows 7 32 ビットから 64 ビットへの移行では、最大アドレス可能 RAM が最初は 4 GB から 8 GB に変更され、最終的にはハイエンド バージョンでは 192 GB になりました。
そのため、レジスタとバスのサイズ (MS 16 ビット OS では、ニブルからバイト、ワード、DWORD へと進化) は、アドレス空間と同様に任意に増加しました。より詳しい説明は @DarkDust からご覧いただけます。