2016-05-07 13 views
0

2次元配列が静的に宣言されると、仮想アドレスの巨大な連続チャンクが生成されます。これらのアドレスは、物理アドレス内の連続したメモリアドレスにマッピングする必要はありません。 1Dアレイでも同じことが起こりますか? 1D配列の個々の要素のアドレスは物理アドレス空間で連続しているのですか、別々の物理ページ上のアドレスにマップできますか?仮想アドレスから物理アドレスへの配列のマッピング

答えて

1

仮想アドレス空間は、Cプログラミングの配列とはまったく関係がありません(C言語を使用すると仮定します)。

2D配列を使用している場合、最後の次元は仮想です。その背後には、コンパイラには1Dの長い1D配列があり、特定のノードに到達するには、最初のインデックスとランの長さを素早く乗算してから2番目のインデックスを追加します。

+0

うん。しかし、それらは仮想アドレスの権利ですか?格納される実際の場所、すなわち物理アドレスは、TLBによる仮想アドレスから物理アドレスへのマッピングに依存する。したがって、このような状況では、1D配列の要素を連続したメモリ位置にマップするか、別のページの物理アドレスにマップすることができますか? –

+0

いいえ仮想アドレスとTLBは2Dアレイには必要ありません。メモリビューから、2D配列と1D配列は同じように見えます。 –

+0

仮想アドレスとTLBは、ユーザープロセスでは表示されません。それはすべてオペレーティングシステムで起こり、各プログラムは一意のメモリを持ち、スワップなどについて知る必要はありません。 –

関連する問題