我可以阅读一篇高级文章来解释如何在 .net 框架中为不同类型(值和引用)分配内存。
例如,我们知道值类型是在堆栈上分配空间的,但它是如何管理的呢?
另外,如何在堆中管理引用类型以及实际值存储在哪里。 (引用类型像任何Class一样都会包含很多值类型,它们保存在哪里以及如何管理)
它比你想象的更复杂。即使您声称“值类型在堆栈上分配”也是不正确的。例如:
class Foo
{
int x;
}
int
是一个值类型,但 x 的值将始终位于堆上,因为它将与作为类的 Foo 实例的其余数据一起存储。
此外,匿名函数和迭代器块的捕获变量使事情变得更加棘手。
我有一个关于 C# 堆/栈内存的文章 http://pobox.com/~skeet/csharp/memory.html您可能会发现有用,但您可能还想阅读 Eric Lippert 的博客文章“堆栈是一个实现细节” http://blogs.msdn.com/ericlippert/archive/2009/04/27/the-stack-is-an-implementation-detail.aspx。特别是,未来的 C# 编译器可以决定将其所有局部变量存储在堆上,使用堆栈仅保存对在方法开始时创建的实例的引用...这不会违反 C# 规范全部。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)