gpt4 book ai didi

c# - 局部变量和堆栈

转载 作者:行者123 更新时间:2023-11-30 13:18:04 26 4
gpt4 key购买 nike

下面的代码片段会发生什么:

while (!Done)
{
Data data = source.GetData();
sink.ProcessData(data);
}

是在每次循环迭代时将新引用 data 放入堆栈(从而防止对象 data 引用的垃圾回收),还是在每次迭代中重用该引用?

最佳答案

Is a new reference data put on the stack at each loop iteration (thus preventing garbage collection of the object data references), or is the reference reused in each iteration?

我认为您关于重用的“主要”问题已得到充分回答,但括号中的内容非常重要。 您认为这会阻止垃圾回收的假设是错误的。如果垃圾收集器检测到对“数据”的唯一引用是堆栈槽并且没有人会再次从中读取那么垃圾收集器甚至可以回收存储与堆栈上的引用。如果占用栈槽的是 GC 不知道的非托管代码,这可能会很糟糕。

如果您需要通过在堆栈中保留某物来保持它的活力,那么您需要添加一个 KeepAlive到方法

关于c# - 局部变量和堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4472692/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com