C標準から(「セクション6.2.5型」):
...配列型は、連続して割り当てられた空でないオブジェクトのセットを表します...
配列は「メモリ」に連続して割り当てられます。
Eric と Interjay が言っていることは、私が最初にこれを書いたときに考慮しなかったことです。Eric と Interjay に感謝します。これは仮想メモリ アドレスにのみ適用されるということです。
お使いのマシンと OS は、仮想アドレス空間 (作業している場所) を作成し、これをチャンク サイズのブロック (ページ) で物理メモリにマップするメモリ管理ユニット (MMU) を使用する可能性があります。
つまり、Eric と Interjay が言っているのは、仮想アドレスは連続していますが、それらがマップする物理メモリのチャンクは異なるアドレスにある可能性があるということです。
Virtual Physical
+----------+ +----------+
| | |
| VMA pg 1 |---------->| PMA 88 (VMA1)
| | |
+----------+ +----------+
| |\ ...
| VMA pg 2 | \ ...
| | \ ...
+----------+ \ ...
\ \ ... big gap in physical
\ \ ... memory
\ \ ...
\ \ ...
\ >--+----------+
\ |
\ | PMA 999 (VMA2)
\ |
>-+----------+
そのため、小さい配列 (ページ サイズより小さい) の場合、これは VMA と PMA アドレスの両方に当てはまる可能性がありますが、PMA != VMA である可能性が最も高いです。ページ サイズより大きい配列の場合、VMA は連続しているように見えますが、上の図が示すように、PMA はバラバラで順序が正しくない可能性があります...
また、Interjay と Eric はさらに一歩進んで、C モデルでは連続していても、C アドレスはメモリ内のどこにでもある可能性があると言っていると思います。ほとんどのOSは仮想から物理へのマッピングを取得するために何らかのページングを実装しているため、これはありそうにありませんが、技術的にはそうであると思います...これは検討することを学ぶのに良いことでした。ありがとうチャップス:)