当程序中使用一个类:载入一个类,占用了一定内存空间,这部分与实例化的实例个数多少无关;Class1 item1;声明一个对象
生成一个引用类型,占4字节内存,不管是什么类型(object o或From f)的引用都是占用4字节内存Class1 item1 = new Class1();
创建一个类实例,开辟一块内存(这块内存跟类本身的大小有关),并且让引用item1指向这块内存的起始位置;

解决方案 »

  1.   

    比如://程序中要使用一个类,.net framework运行支持就载入一个类程序,Class1,增加内存占用量为X字节Class1 item1;//增加内存占用4字节
    Class1 item2;
    Class1 item3;
    Class1 item4;item1=new Class1();//增加内存占用Y字节  (Y的大小与X无直接关系,但存在一定关系)
    item2=new Class1();
    item3=new Class1();
    item4=new Class1();//那么这时内存占用一共增加了: X+4*4+Y*4 字节
      

  2.   

    接上:X的大小与类里面声明的属性,方法有直接关系,主要是类里面的程序写约多行X的值就越大,比如这个类的程序有几百行,那么X就很大了,不过由于X不会倍数增加,所以几乎可以忽略.
    Y的大小与类的成员有直接关系,类的成员占用内存约大Y就越大
    比如一个Form的控件成员越多这个Form的Y就越大对于一般程序员来说,X的大小不可预计,因为毕竟是.net内核的东西,但是Y的大小是可以计算出来的.
      

  3.   

    非常感谢你he_8134,
    //程序中要使用一个类,.net framework运行支持就载入一个类程序,Class1,增加内存占用量为X字节
    这里所开辟的X字节是在所谓的内存代码区吧?一旦载入了一个类,X的大小就是固定的了吧?Class1 item1;//增加内存占用4字节
    这4字节是开辟在栈区吧?(是叫托管栈吗?)item1=new Class1();//增加内存占用Y字节  (Y的大小与X无直接关系,但存在一定关系)
    而这Y个字节是开辟在堆区吧?(是叫托管堆吗?)C#编写的代码都是托管代码,我想再问问托管堆和托管栈和内存中的堆和栈有区别吗?如果有区别是什么?Class1 item1;这个过程是不是能称为声明一个对象?
    item1=new Class1();这个过程是不是能称为实例化一个对象?
    好象有点玩文字游戏了呵呵~再次麻烦你!~~
      

  4.   

    @Ivony()
    我只是以不同的角度去分析这个问题,你说我哪里讲错请指明.@豆豆
    C#编写的代码都是托管代码,我想再问问托管堆和托管栈和内存中的堆和栈有区别吗?如果有区别是什么?//这个些问题我都没想过,只是别人提起来了我也就帮忙说说自己的想法,不可能完全正确但有参考价值.也就是访问速度快慢的问题了,堆为了实现动态分配,访问速度会比较慢,堆和栈的区别应该学汇编和C的时候都会讲过吧?
      

  5.   

    堆区和栈区的区别我大概知道,我是想问问C#中所说的堆和栈是和C、C++中所说的堆和栈上是相同的概念吗?那我怎么来理解托管堆,托管栈?
      

  6.   

    Class1 item1;
    是一个引用而已,没有开辟真正空间new之后才有真正得空间,此时item1只是指向那个空间而已
      

  7.   

    X在堆栈上分配,理论上是不占内存的,或者说堆栈的内存不在内存占用计算之内。而Y则有垃圾回收的问题,而考虑到垃圾回收,Y就不仅仅是这个对象所占用的内存空间,还包括这个对象间接引用的对象,这样,Y就不是确定的,例如一个数组所占用的内存就是不确定的,当然你可以说这个数组里面的元素也必然是new出来的,但很多时候,这些元素不一定是由你得代码所创建的。这些已经超出基础很多了,打住……