我在.NET中閱讀了關於CLR的內容:CLR中的託管堆
當CLR加載堆在SOH和LOH中進行分區時。
當應用程序在那時啓動時,堆由CLR根據其大小分配給應用程序。
LOH堆具有Gen0,Gen1和Gen2區域。
這裏是一個類的所有對象都在GEN0分配,
問題
- CLR如何知道大小由應用程序在堆佔用?
假設有CLR爲Gen0區域分配的4K堆內存。鑑於下面的代碼,這個單線程可能在Gen0上使用全4K內存嗎?
collect = new List(); while(true) { collect.Add(new A()); new A(); new A(); } class A { int a = 0, b = 0; }
1.我相信這是通過計算尺寸的所有聲明的字段肯定考慮其類型 – sll
做到這一點是這是在有關的第二個問題application.What開始分配上堆所需的內存呢? – yuthub
我認爲CLR會從程序集的元數據看它能否計算所需的堆。我正確嗎? – yuthub