gpt4 book ai didi

c# - System.ValueType 的一个实例在堆上还是在栈上?

转载 作者:行者123 更新时间:2023-11-30 19:02:25 25 4
gpt4 key购买 nike

System.ValueType 是 class ,
然而所有值类型都是结构。

如果我像这样创建一个 ValueType 的实例:

System.ValueType foo = 5;

...是保存在堆上还是栈上?

最佳答案

System.ValueType 不是值类型。值类型是继承ValueType 的东西,但不是ValueType 本身。所以:

System.ValueType foo = 5; 

此处,5 被加载到堆栈中。然后将其装箱(使用 int 类型的盒子)到堆上。然后将对象引用分配给引用 foo。我们可以通过查看 IL 来了解这一点:

ldc.i4.5 // push int32 value 5 onto the stack
box int32 // box the value at the top of the stack, type int32
stloc.0 // assign to "foo"

不过,一般来说:结构可以在堆上在堆栈上,这取决于上下文。坦率地说,哪个并不重要——因为两者都是实现细节。重要的是行为……而且(至少在未装箱的形式下),关于结构的关键点是它们的赋值复制语义。

关于c# - System.ValueType 的一个实例在堆上还是在栈上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12508612/

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