【发布时间】:2017-01-11 19:32:18
【问题描述】:
结构是 C# 中的值类型,字符串是引用类型。我知道它们的内存分配和映射的区别,但我不确定 C# 引用类型是如何存储在值类型中的。假设我在以下结构中有一个字符串。 如果结构内部的引用类型是在堆上创建的,那么当结构作为参数传递给函数时,编译器如何管理堆上的数据。
字符串会创建在栈上还是堆上?
如果我将 Struct Point 的对象传递给函数,.net 如何在 Struct 中管理 PointC 的对象。如果 PointC 是在堆上创建的,那么将 stuct 传递给函数将具有与类相同的内存?
public class PointC
{
...
...
}
public struct Point
{
PointC obj;
}
【问题讨论】:
-
I know the difference in their memory allocation and mapping您的问题表明您实际上并不知道... -
@BradleyDotNET 传播值类型在堆栈上的想法只会导致问题。值类型不会放在堆栈上,它们会放在相关变量的特定存储位置所在的任何地方,这几乎可以在任何地方,包括堆栈、堆或两者都没有。
-
这解决了什么问题? .Net 的特性之一是让程序员无需了解这一点。除非您确实遇到问题,否则这不是一个好问题。
-
另外,The Truth About Value Types 在 Microsoft 在桌面 CLR 上的 C# 实现中,当值是局部变量或不是封闭的临时变量时,值类型存储在堆栈中lambda或匿名方法的局部变量,方法体不是迭代器块,jitter选择不注册值