输入输出、方法调用和栈帧
Input and output, method call and stack frame
我正在学习输入和输出,我对这个问题不太确定:
public static int foo(x) {
return 2*x;
}
假设堆栈在 foo 的入口处包含以下值,从下到上,从左到右阅读:
1 2 3
所以 3 在上面,1 在下面。
在 foo
returns 之后,堆栈是 1 2 6 还是 6 2 1?
我认为该方法会首先将值放在顶部,然后 return 将值再次放在堆栈顶部。
很可能,您谈论的是 Java 虚拟机内部使用的堆栈(如 The JVM Specification, Java Virtual Machine Stacks 中所定义。大多数现代编程语言中都存在非常相似的概念。
你的假设是正确的,方法调用和返回是在栈顶完成的。所以,1 2 3
变成了 1 2 6
(这就是为什么它被称为堆栈,很难在一些深埋的位置操作它)。
我正在学习输入和输出,我对这个问题不太确定:
public static int foo(x) {
return 2*x;
}
假设堆栈在 foo 的入口处包含以下值,从下到上,从左到右阅读:
1 2 3
所以 3 在上面,1 在下面。
在 foo
returns 之后,堆栈是 1 2 6 还是 6 2 1?
我认为该方法会首先将值放在顶部,然后 return 将值再次放在堆栈顶部。
很可能,您谈论的是 Java 虚拟机内部使用的堆栈(如 The JVM Specification, Java Virtual Machine Stacks 中所定义。大多数现代编程语言中都存在非常相似的概念。
你的假设是正确的,方法调用和返回是在栈顶完成的。所以,1 2 3
变成了 1 2 6
(这就是为什么它被称为堆栈,很难在一些深埋的位置操作它)。