假设我有一个普通的类,像这样:
public class MyClass
{
int Age=0;
string strName="None"
Double Salary=0;
public void Data1()
{
Age=30;
strName="Robin";
Salary=3500;
}
}
问题
1)对于上面的类,内存将如何分配。在程序运行时内存将被分配还是在我们创建实例时内存将被分配。当我们通过实例调用Data1()
时会发生什么,内存将为函数调用还是数据成员初始化而分配? 告诉我age
,name
和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) 静态类的内存是如何分配的?静态类存储在堆栈上还是堆上...如果是堆栈,为什么?
答:静态类的实例在堆或栈上分配取决于它是如何声明的。如果静态类是作为局部变量声明的,则它将在堆栈上分配。否则,它将在堆上分配。静态类在堆栈上分配的原因是因为它们的生命周期与其所在的方法相同。当方法完成时,静态类也将被销毁。因此,在堆栈上分配它们可以更有效地管理它们的生命周期。
以上是您提出的几个问题,请详细解释。谢谢。