【发布时间】:2020-03-13 11:29:42
【问题描述】:
我正在尝试确定方法返回的 int 将存储在哪里。我认为它是堆栈,但想澄清一下。场景如下:
public int returnInt()
{
var returnVal=1:
Return returnVal;
}
在这种情况下,我知道 returnVal 将存储在堆栈中,并在 returnInt 方法运行时弹出。实际上returnVal是一个值类型,所以不会通过引用传递。
我不清楚的部分如下:
public void callerMethod()
{
var intVal=returnInt();
}
我认为这里发生的是返回实际值,并将其保存在堆栈上的新内存位置以供 callerMethod 使用。
谁能确认这是否正确?还请随时纠正我所说的任何其他不正确的地方...
【问题讨论】:
-
c# 中存储返回类型的位置几乎可以肯定是一个实现细节。
-
@RobertHarvey 你能扩展一下吗?
-
值类型按值赋值(因此得名)。如果您有两个具有相同值类型的变量,并且您将一个变量分配给另一个变量,则与右侧变量关联的 值 将被复制到左侧变量。同样,如果您将函数(返回值类型)的返回值分配给变量,则会复制该值。当值类型的变量超出范围时,不需要清理。几乎所有其他内容都是实现细节;你不需要考虑的事情。
-
您的问题是否与this 重复?您是在问整数是在堆栈上还是在堆上?或者你是在问where methods live(你似乎暗示你相信方法存在于堆栈上——它们也不存在于任何一个之上)。或者你是在问堆栈上为 returnVal 分配的内存位置是否被 intVal 重用?
-
@Flydog57 这就是答案——如果你写成答案我会接受
标签: c# memory stack heap-memory