.NET CLI:如果不在本地,则如何从堆栈中弹出局部变量?

德米特里·巴拉诺夫斯基(Dmitry Baranovskiy)

我试图弄清楚Stack和Heap的工作方式。

所以我对Stack的问题。例如,我们有下一个代码:

static void Main()
{
    int a = 1;
    int b = 2;

    Console.WriteLine(a);
}

这两个变量都将被压入堆栈,变量“ b”将位于变量“ a”的顶部。

如果堆栈仅具有“推”和“弹出”操作,那么如何读取变量“ a”而不从堆栈“ b”弹出呢?

马克·格雷韦尔

局部变量是在堆栈的动态/灵活部分之前定义的,因此实际拥有的是(假设没有优化):

  • 在堆栈框架中定义a和b
  • 将1推入动态堆栈(a和b之后)
  • 将堆栈顶部的值写入(弹出)到
  • 将2压入动态堆栈
  • 将栈顶的值写入(弹出)到b的位置
  • 从a的位置加载(推送)值到动态堆栈
  • 调用Console.WriteLine

可以随时访问局部变量值。它们只是相对于堆栈框架的相对偏移量。通常只能严格地访问用于瞬态值的堆栈的动态部分,但这不是包含我们为a和b命名的位置的内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章