除了栈和堆 还有其他管理内存的方法 但是人们总是忽略这一点 例如既不在堆上也不在堆栈上的寄存器 如果寄存器的大小合适 值类型也可以位于寄存器中 如果在堆栈中存储某个东西很重要 为什么在寄存器中存储它不重要?相反 如果JIT编译器的寄存器规划算法不重要 那么栈的分配策略为什么不能不重要呢?术语解释
之所以有这样的误解 是因为人们总是误以为类型系统与存储分配策略有关 但是 它是存储在堆栈上还是堆上 以及要存储的类型
墨初 知识笔记 90阅读
trong>引用是一个小的数据块,它包含一些信息,CLR可以根据这些信息来找到引用所指向的对象。这很模糊,但却正确,并且没有多余的暗示。

结论
- 值类型可以存储在栈上,也可能不存储在栈上。即便存储在栈上,这也属于实现细节。微软完全可以不这么做。
- 引用在当今的CLR实现为地址,这也是实现细节。
你会发现,我们“无意中”从很多书籍和资料中了解到了CLR的实现细节,如果不是要深入研究这些细节,其实是没有必要知道的。我并不是说这些细节不重要,而是说它们会给我们带来误导,让我们误以为必须是这样。
参考资料
- The Stack Is An Implementation Detail
- The Truth About Value Types
- Memory in .NET - what goes where
- References are not addresses
相关文章
- 你真的了解C#中的值和引用吗?(下)

标签: