どのような形式のメモリ アドレス空間が使用されていますか?
今日、大規模でフラットな仮想アドレス空間が一般的です。歴史的には、ベースアドレスとオフセットのペア、セグメント番号とオフセットのペア、ワードアドレスとバイトまたは他のサブオブジェクトのインデックスなど、より複雑なアドレス空間が使用されてきました。 .
時々、さまざまな回答やコメントが、C (または C++) ポインターは本質的に整数であると主張します。これは、C (または C++) の不適切なモデルです。ポインター操作に関する C (または C++) の規則の一部は、間違いなくさまざまなアドレス空間が原因であるためです。たとえば、配列を超えてポインター演算を定義しないと、基本およびオフセット モデルでのポインターのサポートが簡素化されます。ポインター変換の制限により、アドレスと追加データのモデルのサポートが簡素化されます。
その繰り返しの主張が、この質問の動機となっています。C ポインターが必ずしも単純な整数ではないこと、およびポインター操作に対する C の制限が、サポートされるさまざまなマシンを考慮して適切であることを説明するために、さまざまなアドレス空間に関する情報を探しています。
有用な情報には次のものが含まれる場合があります。
- さまざまなアドレス空間を持つコンピューター アーキテクチャの例とそれらの空間の説明。
- 現在製造中のマシンでまだ使用されているさまざまなアドレス空間の例。
- ドキュメントまたは説明への参照、特に URL。
- アドレス空間が C ポインター規則をどのように動機付けるかについての詳細。
これは幅広い質問なので、それを管理するための提案をお待ちしています。単一の一般的に包括的な回答で共同編集を行うことができれば幸いです。ただし、それは当然の評判を与えることに失敗する可能性があります。複数の有用な貢献に賛成票を投じることをお勧めします。