最新消息:网站改版咯

c#中值类型与类引用类型内存分配问题

计算机科学 Yovae 2254浏览

int,float,char等类型统称为值类型,将一个变量声明为值类型的时候编译器将生成代码来分配足以容纳这种值的一个内存块,例如,声明一个int类型的变量会导致编译器分配4字节的内存,对int类型的变量进行赋值,此值将直接被复制到内存中。

类类型则有不同的处理方式,例如声明一个Circle类的变量时,编译器不会生成代码来分配足以容纳一个Circle的内存块,相反,它唯一做的事情就是分配一小片内存,其中刚好容纳一个地址。以后,Circle实际占据的内存块的地址就会填充到这里,这个地址也就称为对内存块的一个引用。Circle对象实际占有的内存是在使用new关键字来创建对象时候分配的。类是引用类型。

举个例子:

1. 假如有一段代码:

int    i = 42;      //声明并初始化i

int  copyi = i;  //声明并初始化copyi值为i的值

i++                     //i递增不会影响copyi

这里是值类型 i和copyi分别拥有自己的内存.虽然i赋值给copyi 但i递增不会影响copyi的改变。

2.类就不一样

Circle c = new Circle(42);  //创建Circle类的实例c

Circle c2=c;                       //声明Circle对象c2并把c复制给c2

这里是引用类型,此时,编译器虽然分配两个内存块给c和c2,但是内存块中都只包含了一个地址,而且两个地址是指向同一个位置,实际的Circle对象就保存在那个位置。c2改变c也跟着改变。

c#内存分配

c#内存分配

转载请注明:Yovae Studio » c#中值类型与类引用类型内存分配问题