Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c中值类型和引用类型的内存分配#_C#_Memory - Fatal编程技术网

C# c中值类型和引用类型的内存分配#

C# c中值类型和引用类型的内存分配#,c#,memory,C#,Memory,基于下面的代码,我被问到了c中值类型和引用类型的内存管理问题# 根据上面的代码,面试官问我在类测试中创建类X的实例时,在 类X在内存方面,无论字段integeri将分配给堆还是堆栈。无论对象是否分配到堆栈或堆是一个实现细节,都完全有可能创建一个完全有效的C#实现,它根本不使用基于堆栈的分配 这就是说,对于.net framework,它将被分配到堆上,而不是堆栈上,因为它是引用类型:对象是在堆上创建的,引用可能保存在堆栈上 如果它是一个结构,那么结构布局可能位于堆栈上,但是其中的任何引用类型都是

基于下面的代码,我被问到了c中值类型和引用类型的内存管理问题#

根据上面的代码,面试官问我在类测试中创建类X的实例时,在
类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 
    }   
}