2017-01-11 171 views
-1

结构是C#中的值类型,字符串是引用类型。我知道它们在内存分配和映射上的差异,但我不确定C#引用类型是如何存储在值类型中的。假设我在下面的结构中有一个字符串。 如果在Structure中创建引用类型在堆上,那么当结构作为参数传递给函数时,编译器如何管理堆上的数据。引用类型.NET中的值类型

字符串是否会在堆栈或堆上创建?

如果我通过结构对象的功能如何.NET管理的对象PointC内部结构。如果PointC是在堆上创建的,那么传递stuct到函数将具有与class相同的记忆?

public class PointC 
    { 
     ... 
     ... 
    } 
    public struct Point 
    { 
     PointC obj; 
    } 
+0

我会*猜*字符串仍然在堆上,*参考*在堆栈上。尽管这样的区别在C#中通常没有用处。 – BradleyDotNET

+7

'我知道他们的内存分配和映射的区别'你的问题表明你实际上不知道... – Servy

+1

@BradleyDotNET传播价值类型进入堆栈的想法只会导致这个问题。值类型不会放在堆栈上,它们会到达所涉及变量的特定存储位置的任何位置,这些位置可能几乎是任何地方,包括堆栈,堆或两者。 – Servy

回答

1

该引用将在堆栈上创建(或者更具体地说,它将是结构体的位置)。

该引用将具有默认值(null),因此在结构构造中不会创建任何String对象。

当您通过字符串构造函数分配字符串时,将在堆中创建String对象和字符串缓冲区。