我一直在阅读有关此主题的不同文章/页面,终于来到了这篇文章,这让我感到困惑!
在文章中,它提到,Value Types always go where they were declared
作者的意思是,值类型可以驻留在堆栈或堆中,取决于它们的声明方式/位置。
让我放一段代码片段让自己更清楚:
public class Test
{
int testInt;
string testString;
}
int anInt;
string aString;
Test testObj;
testObj = new Test();
执行这些代码行后,内存分配将如下所示:
该结构testInt
存储在堆中,因为它是在Test
类中声明的。
记住这个例子,让我们看一个简单的 Form.cs 代码,后面我声明一个整数。
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public int anotherInt;
}
}
我的困惑部分:
在这种情况下,anotherInt
分配到哪里?堆栈还是堆?从表面上看,我认为大多数答案都是“堆栈”。但是,这个变量不是在一个名为的类中声明的Form1
吗?那么,根据上面的第一个代码片段,它不应该进入堆吗?如果是,那么在什么情况下将结构分配给堆栈?仅当它在方法内声明时?但是,一个方法难道不是属于一个类,它又应该存储在一个堆中吗?
很多问题我都知道!但只是想知道发生了什么。我希望我的问题很清楚。