我正在通过Troelsen的Pro C#书本来学习C#。
我熟悉堆栈和堆,以及C#如何存储这些东西。在C ++中,无论何时使用,new我们都会收到指向堆中某物的指针。但是,在C#中new,我的行为似乎与众不同:
new似乎只是调用int默认构造函数,但此类int的值仍将存储在堆栈中我了解所有对象/结构等都存储在堆中,无论是否new使用。
所以我的问题是:如何int在堆上实例化一个?(这与“装箱”有关吗?)
您可以对任何值类型进行装箱System.Object,以便将其存储在托管堆上:
int number = 1;
object locatedOnTheHeap = number;
Run Code Online (Sandbox Code Playgroud)
另一个问题是为什么你需要这个。
这是来自必知的 MSDN 论文中的经典示例:装箱和拆箱(C# 编程指南)
当 CLR 装箱值类型时,它会将值包装在 System.Object 内并将其存储在托管堆上。装箱用于在垃圾收集堆中存储值类型。装箱是值类型到类型对象或由该值类型实现的任何接口类型的隐式转换。装箱值类型会在堆上分配一个对象实例并将该值复制到新对象中。
。
我知道所有对象/结构等都存储在堆上
顺便说一句,IIRC 有时 JIT 会优化代码,因此类似类型的值类型对象int存储在 CPU 寄存器中而不是堆栈中。
| 归档时间: |
|
| 查看次数: |
2338 次 |
| 最近记录: |