【发布时间】:2012-12-05 18:00:29
【问题描述】:
我一直在阅读关于这个主题的不同文章/页面,最后来到this article,这让我很困惑!
在文章中提到Value Types always go where they were declared,作者的意思是,值类型可以驻留在堆栈或堆中,取决于它们的声明方式/位置。
让我写一个代码sn-p让自己更清楚:
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 的类中声明的吗?那么,按照上面的第一个代码sn-p,它不应该进入堆吗?如果是,那么在什么情况下将结构分配给堆栈?仅当它在方法内声明时?但是,一个方法难道不属于一个类,它又应该存储在一个堆中吗?
我知道很多问题!但只是想知道发生了什么。我希望我的问题很清楚。
【问题讨论】:
-
我将发布到 Eric Lippert 博客的必填链接:blogs.msdn.com/b/ericlippert/archive/2009/04/27/…
-
只是想做同样的事情 :) 点赞。
-
@JonB - 我假设这篇文章指向的答案是“堆”,它只回答了我的一个问题。那么“在什么情况下将结构分配给堆栈?”
-
@Sandeep 您可能不会发现这是一个令人满意的答案(这就是我只发表评论的原因)。这篇文章基本上说一个变量“当它可以”时会进入堆栈。它进一步表示,这对开发人员来说并不重要,而且在技术上根本不需要堆栈。
标签: .net heap-memory value-type reference-type stack-memory