.NET面試題系列(24)值型別總是分配在棧上嗎?

~沐风發表於2024-06-22

序言

不是,比如下面三種情況:

1、引用型別內部的變數,即使是值型別,也會隨同引用型別的例項一起被分配在堆上。

2、對於值型別的陣列,由於陣列是引用型別,陣列內的值型別元素,也被分配在堆上。

3、對於閉包,如下:

Action<int> act = a =>
{
Console.WriteLine(a);
};

C# compiler 生成的IL 會新增一個靜態的輔助類,閉包內的區域性變數也會成為輔助類的成員變數,因此,這種值型別的區域性變數也被分配到堆上。

記住:值型別與引用型別的本質區別在於:值型別是“整體複製”,而引用型別是 “複製引用”。

資料

相關文章