如何从堆栈中删除值类型?

时间:2016-05-08 05:48:48

标签: .net memory-management clr

我试图研究CLR中的细节,对我来说可能听起来很明显的一件事并不适合我:

如何从堆栈中清除值类型?

我理解GC在没有堆栈中的地址的情况下清除所有堆但我读过它并不清除堆栈赋值类型。

任何想法?

2 个答案:

答案 0 :(得分:0)

我不确定我理解你的要求,但我会尽力回答并希望它会有所帮助。

通常,对于堆栈中的清除值,有一个名为pop的操作。因此,要删除值类型的值或引用类型的值,请弹出它。反之亦然push为堆栈增加值。

(我写了“一般”,因为它对所有基于堆栈的数据结构都是正确的,而不仅仅是CLR堆栈。)

您需要了解的另一件事是,堆栈与堆不同,不是通过压缩内存区域来收集的,堆栈是预先分配的内存块,并且在需要时将值推入并弹出。 / p>

如果您想知道堆栈内存的确切详细信息并注册使用等,您可以在谷歌上找到一些链接,但我不认为您正在寻找。

答案 1 :(得分:0)

通常,通过递减堆栈指针寄存器中的值来执行堆栈的分配。要取消分配堆栈位置,堆栈指针会递增。递增或递减堆栈指针的字节数分别取决于要分配或解除分配的变量的大小。 JIT编译器发出机器指令以根据需要操作堆栈指针。