【发布时间】:2015-07-29 16:09:54
【问题描述】:
我一直在阅读一本关于 C# 的书,并遇到了将值存储在内存中的主题。引用类型的实例总是在堆上创建,但是变量的值存在于它被声明的任何地方。只有局部变量(在方法中声明的变量[非匿名])和方法参数存在于堆栈中。
所以我的问题是 - 如果我将这些结构声明为这样的局部变量 - 它们会全部放入堆栈吗?
struct A<T> where T : struct { }
struct B<T> where T : class { }
struct C { }
我只是想知道struct 的内容是否会对它在内存中的存储位置产生任何影响。
感谢 C# 大师!
【问题讨论】:
-
这将是那些“比那更复杂”的问题之一,请放心,您不需要知道如何实现 .Net 来使用 c#。虽然,好奇可能并没有什么坏处。
-
强制性“堆栈是实现细节”链接:blogs.msdn.com/b/ericlippert/archive/2009/04/27/…
-
相关:stackoverflow.com/questions/1113819/…(注意一些纠正答案的 cmets)
-
Eric Lippert blogs.msdn.com/b/ericlippert/archive/2009/05/04/…987654323@这篇精彩博文的第 2 部分
-
我认为这里有趣的问题是
struct内容是否会影响其存储位置。除此之外,struct所在的位置是一个实现细节。在大多数情况下它是堆栈,但它们也可以在堆上(类字段、异步块、迭代器块等)。你可能会发现这个 SO 讨论也很有趣stackoverflow.com/questions/815354/…
标签: c# memory struct heap-memory stack-memory