2012-11-06 52 views
0

我正在閱讀內存分配的概念。在那裏我發現一個聲明對象類型需要動態內存和原始類型需要靜態內存他們證明它說如果需求是動態內存,它被分配在堆上,否則它會在堆棧上。爲什麼對象類型需要動態內存和原始類型需要靜態內存?

我不明白這是爲什麼?

每一個幫助表示讚賞。

由於

+1

這聽起來對我來說非常奇怪。我猜這些作者可能意味着基本類型不需要超出其常量大小的內存,而複雜實體可能需要根據其狀態在運行時增加額外的內存。 – SomeWittyUsername

+0

是的,這就是他們的意思 –

回答

-1

的對象需要動態存儲器中,圖元需要靜態存儲器是因爲原始類型具有預定義的大小的原因;因此,它們可以放置在靜態存儲器中。對象大小在運行時間之前可能不知道,因此內存是動態分配的。

+0

這意味着內存是關注這些類型? –

+0

這是不正確的。對象大小在編譯時非常有名。 – SomeWittyUsername

+0

我想這取決於編程語言 –

0

這個答案是不是100%完成,但一些,這是相關的,我沒有代表簡單地評論...

堆棒周圍程序的生命,是多少(通常情況下)更大,所以它可能是一個設計決定,將對象(如C#和Java等內存管理語言)分配給堆以使堆棧內存不會超載。另外,堆棧內存與堆棧的本質有關的變量範圍(當它可以被使用時)相關聯,並且如果內存管理器將處理這些對象,則在特定時間執行該操作效率更高,而每當該變量彈出時疊加。堆也沒有可變大小的限制,它更真實地適應對象,根據其類中定義的內容,對象可能非常大。

這裏是兩個(棧,堆)的差異的很好的解釋:
http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx

也非常好,但朝向C的齒輪傳動:
http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html

雖然既不那些的鏈接特別針對C#的WHY。我可能會停靠這個答案:)