我有以下幾行代碼:分配內存以可變在c#
SomeClass a;
SomeClass b = new SomeClass();
SomeClass c = new SomeClass()
{
Foo="sss",
Bar="dddd"
};
請告訴我類實例a
,b
和c
的大小(在存儲器中)?
有多少內存分配給每個變量?
我有以下幾行代碼:分配內存以可變在c#
SomeClass a;
SomeClass b = new SomeClass();
SomeClass c = new SomeClass()
{
Foo="sss",
Bar="dddd"
};
請告訴我類實例a
,b
和c
的大小(在存儲器中)?
有多少內存分配給每個變量?
當你實例化b和c時,內存被自動分配,你不必自己處理它。你可以忘記那個部分,這是被管理的魔法部分,一旦這些對象不再需要(無指針...),垃圾收集器將爲你釋放內存空間。儘管如此,b和c採用相同的內存大小,因爲它是相同的類型。 a沒有空間,因爲它尚未初始化。
實際變量都是相同的大小,因爲它們是引用。並且堆中的實際對象也將具有相同的大小(請注意,這些字符串將是單獨的對象,該對象具有引用2)。當然,'a'沒有實際引用,因爲它是'null'。 https://stackoverflow.com/questions/3800882/how-big-is-an-object-reference-in-net – juharr
什麼是在堆上,什麼是堆棧實際上是一個框架的實現細節。由於是串聯實習。並且JiT編譯可能會丟失一個,因爲它永遠不會被使用,並且它是無效代碼。所以:可能的最大和最小量之間的任何值,取決於運行時間。更大的問題是:你爲什麼問?你有什麼樣的微觀優化或錯誤的道路? – Christopher