这个函数的堆栈是什么样的?

时间:2012-07-12 19:49:32

标签: jvm

我必须回答问题。

给出的是功能:

show(int a, int b) 
{
    int v1;
    int v2;
}

a和b是参数。 v1和v2是局部变量。绘制一个堆栈,其中a,b,v1,v2,返回地址的旧帧指针是清楚的。还显示高和低堆栈地址的位置。

我希望我已经足够清楚了。

编辑:

我现在拥有的是:

v2      <-- SP
v1
prevLV  <-- LV
Ra
a
b

1 个答案:

答案 0 :(得分:0)

绘制一个明确的图片很难,因为它取决于JVM的实现,但你现在拥有的是非常不正确的。

因为Java不区分args和temps(参见iload等等。字节码),所以它们需要在内存中并排显示,或者某人必须从调用者挂起的堆栈中复制它们在构造时间(这往往是昂贵的)对被调用者。