本书的大部分内容从未讨论程序如何执行以及如何在堆栈和堆上为它们分配内存。数据何时存储在堆栈上以及何时存储在堆上。
假设我有一堂常规课,比如
public class MyClass
{
int Age=0;
string strName="None"
Double Salary=0;
public void Data1()
{
Age=30;
strName="Robin";
Salary=3500;
}
}
Question
1)对于上面的类,内存将如何分配。当程序运行时,将分配内存,或者当我们创建实例时,将分配内存。当我们打电话时Data1()
通过实例,会发生什么以及如何分配内存。内存将被分配用于函数调用或数据成员初始化?告诉我将分配多少内存age
, name
and salary
。内存将在堆栈或堆上分配。
public class MyClass
{
static int y=0;
static string strComp="None"
int Age=0;
string strName="None"
Double Salary=0;
public void Data1()
{
Age=30;
strName="Robin";
Salary=3500;
}
public static void Data3()
{
y=50;
strComp="Hello";
}
}
2) 如何以及何时为静态数据成员和函数分配内存。当我们打电话时MyClass.Data3()
然后内存将被分配或者当我们刚刚运行应用程序时。内存分配在堆上还是栈上?
3)如何为静态类分配内存。静态类存储在堆或堆栈上...如果堆栈那么为什么?
在这里我问了几个问题,请详细解释。谢谢。
1.) 创建类的实例时将分配内存。你打电话时Data1()
不需要额外的内存,因为您只引用类实例的字段(并且没有其他局部变量)。自从MyClass
是引用类型,内存将在托管堆上分配。
2.) 静态方法不消耗任何内存。在访问任何静态字段或创建它们所包含的类型的任何实例之前,静态字段会被初始化(MyClass
在这种情况下)
3.) 您无法创建静态类的实例,因此只有在创建类型本身时才动态分配内存。在程序中首次引用静态类之前,保证会加载静态类并初始化其字段并调用其静态构造函数。创建后,静态类将保留在内存中,直到您的应用程序域关闭为止。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)