基本概念:堆与堆栈

来源:互联网 发布:硬盘检测软件 编辑:程序博客网 时间:2024/04/30 08:33

C#中根据存放数据的方式不同,可以将数据类型分为值类型和引用类型两大类,它们的保存位置不同。值类型变量直接把变量的值保存在堆栈中;引用类型的变量把实际数据的地址保存在堆栈中,而实际数据则保存在堆中。

这里涉及到两个基本概念的区分:堆和堆栈。

 

注意,堆和堆栈是两个不同的概念,在内存中的存储位置也不相同。堆一般用于存储可变长度的数据,如字符串类型;而堆栈则用于存储固定长度的数据,如int等。由数据存储的位置可知,当把一个值变量赋值给另一个值变量时,会在堆栈中保存两个完全相同的值,也就是产生“副本”。

 

而把一个引用变量赋值给另一个引用变量时,则会在堆栈中保存对同一个堆位置的引用,即在堆栈中保存的是同一个堆的地址。

 

在执行数据操作时,对于值类型,由于每个变量都有自己的值,因此对于一个变量的操作不会影响其他的变量。而对于引用类型的变量,对一个变量的数据执行操作就是操作这个变量在堆中的数据。如果两个引用类型的变量引用同一个对象,实际含义就是他们在堆栈中保存的堆的地址相同,因此对一个变量的操作,影响到引用同一个对象的另一个变量。

原创粉丝点击