我知道引用类型会被进行垃圾回收。我想知道在堆栈中的值类型是否也会被垃圾回收?
我知道引用类型会被进行垃圾回收。我想知道在堆栈中的值类型是否也会被垃圾回收?
这似乎是你问题的一个非常, 非常 "具体实现细节" 的版本。 堆栈是特定版本运行时的实现细节,因此如果您要询问有关它的问题,您必须接受这样一个事实:您正在询问特定芯片架构上特定寄存器中的特定值。
进一步阅读:
The Stack Is An Implementation Detail, Part One
The Stack Is An Implementation Detail, Part Two
“Out Of Memory” Does Not Refer to Physical Memory
现在我有点困惑于你提到的“值”和“值类型”。我发现很难理解它们之间的区别。
这很棘手!我们用“值”和“引用”这些词来表示太多的事情。让我总结一下。
变量是一个存储位置。
每个变量都有一个类型。类型可以是值类型或引用类型。
存储位置包含一个值。
值类型变量的值是值类型的值。例如,int是一个值类型。类型为int的变量的值是int,比如12。
引用类型的变量值是指向该类型对象的引用,或者是null。例如,string是一个引用类型。类型为string的变量值是指向字符串的引用,或者是null。
这就是为什么它们被称为“值类型”和“引用类型”的原因。 值类型的值是该类型的实例。 引用类型的值是指向该类型实例的引用。
现在是否清晰明了呢?
共同语言运行时(CLR)在堆栈和堆中分配对象的内存。
值类型存储在堆栈中,与存储在堆上的引用类型内容的引用一起。垃圾回收器的作用是在从堆栈弹出引用时释放分配给引用类型内容的内存。
不是引用类型内容的值类型不存储在堆上,因此不会被垃圾回收器清理。