C# 4.0 对象实例存储在哪里?

C# 4.0 对象实例存储在哪里?,c#-4.0,C# 4.0,对象是类实例变量时存储在堆中,是函数变量时存储在堆栈中?正确吗?引用存储在堆栈上(但并非所有情况下都是如此) 注意:仅适用于局部变量。例如,实例和类变量,它们是对象的一部分,因此位于堆上 而对象存储在堆上 类对象,包括方法代码和静态字段:heap 对象,包括实例字段:heap 局部变量和方法调用:堆栈 堆栈是存储方法和局部变量的存储位置 堆是存储对象及其实例变量的内存位置 现在,实例变量是在类主体内部和任何类的方法主体外部定义的任何变量,不带“静态”字段修饰符 只要实例变量的封闭对象在范围内,

对象是类实例变量时存储在堆中,是函数变量时存储在堆栈中?正确吗?

引用存储在堆栈上(但并非所有情况下都是如此)

注意:仅适用于局部变量。例如,实例和类变量,它们是对象的一部分,因此位于堆上

而对象存储在堆上

  • 类对象,包括方法代码和静态字段:heap
  • 对象,包括实例字段:heap
  • 局部变量和方法调用:堆栈

堆栈是存储方法和局部变量的存储位置

堆是存储对象及其实例变量的内存位置

现在,实例变量是在类主体内部和任何类的方法主体外部定义的任何变量,不带“静态”字段修饰符

只要实例变量的封闭对象在范围内,实例变量就在范围内。实例变量是包含它的对象的一部分,不能独立于它而存在


希望它能澄清您的概念。

非常正确。因此,这意味着所有这些概念都将存储在一个heapNope中。关于值类型(仍然是对象,但通常可以在堆栈上找到)有一些奇怪之处。“引用存储在堆栈上”不一定。对象属性中的引用呢?这些也会在堆上。函数中局部变量中的引用可能在堆栈上。我一般这么说……看第二点……我认为您指的是实例字段。@ShashankKadne:不管要点是什么,开头的句子完全错了。对象存储的位置是实现细节。赵:真的,相信它会有危险的。我不知道.Net的引擎,但谷歌的V8 JavaScript引擎(JavaScript是另一个垃圾收集环境)非常聪明,可以对代码进行静态分析,识别出哪些对象只在函数中使用过,然后被释放——并将它们放在堆栈上,这样它们在返回时就可以立即被回收。我没有清理。除了实际问题,它似乎回答了所有问题的一半。问题中的实际部分是什么P你在它周围跳了很多舞,画了很多漂亮的点,但是你还没有真正费心去把它们联系起来,以真正回答被问到的问题。