C# c中值类型和引用类型的内存分配#
基于下面的代码,我被问到了c中值类型和引用类型的内存管理问题# 根据上面的代码,面试官问我在类测试中创建类X的实例时,在C# c中值类型和引用类型的内存分配#,c#,memory,C#,Memory,基于下面的代码,我被问到了c中值类型和引用类型的内存管理问题# 根据上面的代码,面试官问我在类测试中创建类X的实例时,在 类X在内存方面,无论字段integeri将分配给堆还是堆栈。无论对象是否分配到堆栈或堆是一个实现细节,都完全有可能创建一个完全有效的C#实现,它根本不使用基于堆栈的分配 这就是说,对于.net framework,它将被分配到堆上,而不是堆栈上,因为它是引用类型:对象是在堆上创建的,引用可能保存在堆栈上 如果它是一个结构,那么结构布局可能位于堆栈上,但是其中的任何引用类型都是
类X在内存方面,无论字段integeri将分配给堆还是堆栈。无论对象是否分配到堆栈或堆是一个实现细节,都完全有可能创建一个完全有效的C#实现,它根本不使用基于堆栈的分配 这就是说,对于.net framework,它将被分配到堆上,而不是堆栈上,因为它是引用类型:对象是在堆上创建的,引用可能保存在堆栈上 如果它是一个结构,那么结构布局可能位于堆栈上,但是其中的任何引用类型都是对堆上对象的引用。因此,即使这是一个结构,字符串也会存在于堆上,而整数可能存在于堆栈上 注意:这些都是实现细节,不要一成不变地对待它们:未来的.net实现或C#的替代实现可以自由更改这些细节
public class X
{
int i=0;
string s= string.empty;
}
class test
{
static void Main()
{
X obj = new X(); //creating instance of X class
}
}