日期:2014-05-18  浏览次数:20749 次

关于静态方法的内存分配问题
静态方法是在声明时候就已经分配了固定的内存空间,还是在调用的时候分配呢?另外,当多次调用静态方法的话,内存是不变的么?举个例子:
class Test
{
  public static int A(int aNum, int bNum)
  {
  int cNum;
  cNum = aNum + bNum;
  return cNum;
   
  }
}


//第一次调用该静态方法  
int a = 1, b = 3;
int i = Test.A(a,b);
   
//第二次调用该静态方法
a = 2;
b = 3;
i = Test.A(a, b);

第二次调用静态方法会产生另外一个内存空间吗?还是在第一次调用的内存中进行呢?
我是新手,恳求大家多多指教,谢谢啊

 

------解决方案--------------------
.net是基于VM的,它的所有class都是动态调入内存的,只有真正需要一段代码的时候才开始编译它。

实际上那些通过读一两本c语言书的人是无法想明白.net的机制的,因为c很低级,而.net则很复杂。

实际假设仅从实用角度,你应该基于测试、而不是什么理论,来理解.net。有时候纠结于内存空间问题,而你又测试不出来,这就等于是空耗时间在那里幻想.net的原理。
------解决方案--------------------
…调用的时候参数肯定要压栈的,但是调用完就释放了,而且有的参数在JIT之后会被优化到CPU的寄存器,这部分可以占内存,也可以不占。

方法的代码只有一个副本,程序集加载之后就在内存里了。