我正在閱讀有關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的解釋進來。 –