静态成员存储在内存中的啥位置? C#.Net中的堆栈/堆[重复]

Posted

技术标签:

【中文标题】静态成员存储在内存中的啥位置? C#.Net中的堆栈/堆[重复]【英文标题】:Where are static members stored in memory? stack/ heap in C# .Net [duplicate]静态成员存储在内存中的什么位置? C#.Net中的堆栈/堆[重复] 【发布时间】:2016-06-08 03:58:13 【问题描述】:

前面的文章讨论了值和引用类型以及它们的内存分配。

这里我想了解一下静态成员的内存分配。

我有一个简单的类,它有静态和非静态整数,如下所示。

 class Sample
 
   public int nonStaticInt = 0;
   public  static int staticInt = 0;
 

我的问题是,静态整数在哪里?堆栈/堆。以及它们如何在创建任何对象之前首先进入内存。

谢谢!

【问题讨论】:

根据我的理解,整数留在堆栈内存中一般为假。在这种情况下,nonStaticInt 将留在堆中。 依赖于实现。为什么需要知道这些信息? @CodyGray 因为这是我的面试问题之一! :) 【参考方案1】:

分配静态变量时,它将作为 Methodtable 的一部分存储。 方法表意味着当一个类在应用程序中第一次加载时,将在appdomain中为类级变量和类内的方法分配单独的内存。 .

如果静态变量是原始类型,它将作为 Methodtable 的一部分存储。如果是引用类型,则存放在堆内,引用存放在Methodtable中

【讨论】:

以上是关于静态成员存储在内存中的啥位置? C#.Net中的堆栈/堆[重复]的主要内容,如果未能解决你的问题,请参考以下文章

数组存储在内存中的啥位置?

对象的实例变量存储在 JVM 中的啥位置?

常量变量存储在 C 中的啥位置?

方法存储在内存中的啥位置?

React Native - AsyncStorage 和状态存储在硬件内存中的啥位置?

C语言中static定义的变量 存储在OS内存的啥区域?