在我目前的理解中,当调用函数或方法时,与该方法相关的数据(如MethodA
(存储在堆栈帧中,以便在执行该方法时跟踪。如果这个方法反过来调用另一个方法,比如MethodB
,那么与MethodB
相关的数据将存储在另一个堆栈帧中,该堆栈帧将放在MethodA
的堆栈帧的顶部。
-
我可以问一下,在C#中,那些堆栈帧存储在堆栈上吗?还是它们位于一个单独的地方?
-
如果堆栈帧位于堆栈上,并且说如果堆栈帧中有一些引用类型的数据,我可以问存储在这些堆栈帧中的那些数据的值是否是指向堆栈的对象的引用吗?或者在这种情况下,对象本身是否存储在堆栈上的堆栈帧中?
非常感谢!
我可以问一下,在C#中,那些堆栈帧存储在堆栈上吗?还是它们位于一个单独的地方?
是的,这就是为什么它被称为"堆栈"这是一堆调用帧。当我们说一个变量被存储时;在堆栈上;我们的意思是,它存储在其中一个调用帧中。它之所以是一个堆栈,是因为当函数返回时,它的调用帧可以弹出,我们可以返回到调用函数。
如果堆栈帧位于堆栈上,并说如果堆栈帧中有一些引用类型的数据,我可以问存储在这些堆栈帧中的那些数据的值是否是对象的引用吗?或者在这种情况下,对象本身是否存储在堆栈上的堆栈帧中?
如果引用类型的方法中有一个局部变量,这意味着调用帧包含几个字节,这些字节保存堆上该对象的地址。