java - jvm中操作数栈的高位地址在上面还是下面
高洛峰
高洛峰 2017-04-18 10:50:18
0
2
722
  • 这是我在一篇文章中看到的图片。

  • 我百度查了下,内存中的栈,高位地址在上,每次压栈(int这类),都会将地址减去1个字节,然后将值放入栈。

  • 但是这张图,在对操作数栈做压栈操作的时候,却从底下往上放了。不知道是我理解错了,还是作者的一个失误。

  • 谢谢指点

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全員に返信(2)
迷茫

この記事の他の写真も見ましたが、操作数栈に関係する写真はすべて下から上です

いいねを押す +0
大家讲道理

まず、int a と int b がスタックに連続して格納される場合、b のメモリ アドレスは a のアドレスより 1 バイトではなく 4 バイト大きくなければなりません。

ビッグ エンディアン モードとリトル エンディアン モードについては、スタック内のデータの最小ストレージ単位はバイトであり、リトル エンディアン モードではバイト単位のストレージが固定されています。

同じ16進数データ0x3F00は、リトルエンディアンモードでは00→3Fの順に格納され、ビッグエンディアンモードでは3F→00の順に格納されます。端的に言えば、下位バイトを先に格納するか、上位バイトを先に格納するかということです。

JavaのストレージモードはコンピュータのCPUに関係しますが、ビッグエンディアンでもリトルエンディアンでもストレージモードと解析も逆、つまり同じintの計算結果は同じになります。それはビッグエンディアンまたはリトルエンディアンです。

回答に誤りや脱落があれば修正してください

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート