当程序中使用一个类:载入一个类,占用了一定内存空间,这部分与实例化的实例个数多少无关;Class1 item1;声明一个对象
生成一个引用类型,占4字节内存,不管是什么类型(object o或From f)的引用都是占用4字节内存Class1 item1 = new Class1();
创建一个类实例,开辟一块内存(这块内存跟类本身的大小有关),并且让引用item1指向这块内存的起始位置;
生成一个引用类型,占4字节内存,不管是什么类型(object o或From f)的引用都是占用4字节内存Class1 item1 = new Class1();
创建一个类实例,开辟一块内存(这块内存跟类本身的大小有关),并且让引用item1指向这块内存的起始位置;
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 字节
Y的大小与类的成员有直接关系,类的成员占用内存约大Y就越大
比如一个Form的控件成员越多这个Form的Y就越大对于一般程序员来说,X的大小不可预计,因为毕竟是.net内核的东西,但是Y的大小是可以计算出来的.
//程序中要使用一个类,.net framework运行支持就载入一个类程序,Class1,增加内存占用量为X字节
这里所开辟的X字节是在所谓的内存代码区吧?一旦载入了一个类,X的大小就是固定的了吧?Class1 item1;//增加内存占用4字节
这4字节是开辟在栈区吧?(是叫托管栈吗?)item1=new Class1();//增加内存占用Y字节 (Y的大小与X无直接关系,但存在一定关系)
而这Y个字节是开辟在堆区吧?(是叫托管堆吗?)C#编写的代码都是托管代码,我想再问问托管堆和托管栈和内存中的堆和栈有区别吗?如果有区别是什么?Class1 item1;这个过程是不是能称为声明一个对象?
item1=new Class1();这个过程是不是能称为实例化一个对象?
好象有点玩文字游戏了呵呵~再次麻烦你!~~
我只是以不同的角度去分析这个问题,你说我哪里讲错请指明.@豆豆
C#编写的代码都是托管代码,我想再问问托管堆和托管栈和内存中的堆和栈有区别吗?如果有区别是什么?//这个些问题我都没想过,只是别人提起来了我也就帮忙说说自己的想法,不可能完全正确但有参考价值.也就是访问速度快慢的问题了,堆为了实现动态分配,访问速度会比较慢,堆和栈的区别应该学汇编和C的时候都会讲过吧?
是一个引用而已,没有开辟真正空间new之后才有真正得空间,此时item1只是指向那个空间而已