2

C プログラムのエンディアンとメモリ レイアウトについて 1 つ質問があります。いくつかのサイトを検索してみましたが、満足のいく答えが得られませんでした。「標準の PC x86 コンピューター アーキテクチャでは、スタック部分が下方のメモリ領域に向かって成長します。他の一部のアーキテクチャでは、反対方向に成長します」.

スタックはビッグ エンディアン アーキテクチャで逆方向に成長しますか。High Memory と Low Memory は論理アドレスであり、物理アドレスではないと思います。

同じための良い参考資料です。

4

2 に答える 2

8

スタックがどのように成長するかは、マシンがビッグ エンディアンかリトル エンディアンかには関係ありません。4 つの組み合わせすべてが可能ですが、ビッグ エンディアンとリトル エンディアンの両方のマシンの圧倒的多数は、上位アドレスから下位アドレスへと成長するスタックを持っています。

スタックが成長する方向は単なる慣例ですが、ハードウェアにある程度組み込まれている可能性があります。新しいアーキテクチャでは、スタックが下向きに成長する傾向があります。これは、それが最も一般的な規則であり、一部のプログラムは他の可能性を正しく処理しないという理由だけです。スタックに割り当てるスペースの量を決定する必要がないため、もともと人気がありました (これは、RAM が 32K 未満のマシン上でした)。

論理アドレス指定と物理アドレス指定は、関連のないもう 1 つのプロパティです。「論理」とは「仮想」を意味すると仮定すると、仮想メモリが使用されている場合は仮想アドレス空間で、使用されていない場合は物理アドレス空間で、スタックが成長します。仮想メモリをオフにできる CPU (x86 など) もあれば、オフにできない CPU (Alpha など) もあります。

于 2013-06-04T21:09:27.727 に答える
0

すでに回答されているように、エンディアンとメモリ レイアウトの間には関係がありません。ここには、プログラムのメモリ レイアウトに関する良い情報があります。 http://www.inf.udec.cl/~leo/teoX.pdf

ウィキでエンディアンについてすべて見つけることができます。 https://www.princeton.edu/~achaney/tmve/wiki100k/docs/Endianness.html

于 2013-06-05T00:29:25.283 に答える