我试图更深入地了解编程语言的低级操作是如何工作的,尤其是它们如何与OS/CPU交互.我可能已经在Stack Overflow上的每个堆栈/堆相关线程中阅读了每个答案,并且它们都很棒.但还有一件事我还没有完全理解.
在伪代码中考虑这个函数,这往往是有效的Rust代码;-)
fn foo() {
let a = 1;
let b = 2;
let c = 3;
let d = 4;
// line X
doSomething(a, b);
doAnotherThing(c, d);
}
Run Code Online (Sandbox Code Playgroud)
这就是我假设堆栈在X行上的样子:
Stack
a +-------------+
| 1 |
b +-------------+
| 2 |
c +-------------+
| 3 |
d +-------------+
| 4 |
+-------------+
Run Code Online (Sandbox Code Playgroud)
现在,我读到的关于堆栈如何工作的一切都是它严格遵守LIFO规则(后进先出).就像.NET,Java或任何其他编程语言中的堆栈数据类型一样.
但如果是这样,那么在X行之后会发生什么?显然,接下来我们需要的是使用a和b,但这意味着操作系统/ CPU(?)必须弹出d并c首先回到a和b.但是它会在脚下射击,因为它需要c并且d在下一行.
所以,我想知道幕后究竟发生了什么?
另一个相关问题.考虑我们传递对其他函数的引用,如下所示:
fn foo() {
let …Run Code Online (Sandbox Code Playgroud)