我正在阅读有关Dispose模式并碰到如何memory is allocated。以下是http://codebetter.com/karlseguin/2008/04/28/foundations-of-programming-pt-7-back-to-basics-memory/的报价。如果大部分数据都堆在堆栈上,堆栈内存的主要重要性/作用是什么?
内存分配
....
....
唯一的例外是属于引用类型值类型 - 例如用户类的Id特性的推移的堆以及User类本身的实例。
这里也提到了Stack Overflow的问题。 memory allocation for value type inside reference type in .net
我的理解是,所有值类型与它们声明的位置无关,都会叠加。现在看起来错了。在下面的代码中,i
将堆积如山;根据链接不在堆栈上。这是因为MyClass
是引用类型,它将与堆一起堆栈,并且它的所有值类型。
class MyClass()
{
int i = 5;
}
好吧,所以只有值类型那些不是类的一部分,然后转到堆栈内存。对?但是,像C#这样的DotNet语言中的几乎所有内容都在课堂内。那么到底什么去堆栈内存?
这个answer解释了什么值类型堆。
如果是这种情况,那么堆栈内存上的内存很少甚至几乎没有。
我怀疑我误解了一些东西。
如果几乎所有的数据都进入堆内存,我不明白堆栈内存的重要性和作用。
请解释。
以下两篇文章以简单的方式解释了关于内存管理的很多内容。
堆栈主要用于局部变量并跟踪调用树中的这些变量。 – juharr
阅读Eric Lippert的[堆栈是一个实现细节](https://blogs.msdn.microsoft.com/ericlippert/2009/04/27/the-stack-is-an-implementation-detail-part-one/) 。 –
堆栈是有用的,因为它推动和弹出。这是不小的优势。这就是为什么*是堆栈。它*发生*有时也在内存分配方案中有用 - 并从那里Eric Lippert的解释进来。 –