2019年2月21日 (Location:ordos)
年前在面试Lenovo的时候,面试官问了关于堆和栈的相关问题,一直没有搞清楚栈和堆,此文为解决该困惑。
一、堆和栈的叫法
堆:在c里面叫堆,在c#里面其实叫托管堆。
栈:就是堆栈,因为和堆一起叫着别扭,就简称栈了。
托管堆:托管堆不同于堆,它是由CLR(公共语言运行库(Common Language Runtime))管理,当堆中满了之后,会自动清理堆中的垃圾。所以,做为.net开发,我们不需要关心内存释放的问题。
内存堆栈和数据结构堆栈:
①数据结构堆栈:是一种后进先出的数据结构,它是一个概念,栈是一种后进先出的数据结构。
②内存堆栈:存在内存中的两个存储区(堆区,栈区)。
栈区:存放函数的参数、局部变量、返回数据等值,由编译器自动释放
堆区:存放着引用类型的对象,由CLR释放
二、值类型和引用类型
1、值类型和引用类型的内存分配。
引用类型:引用类型存储在堆中。类型实例化的时候,会在堆中开辟一部分空间存储类的实例。类对象的引用还是存储在栈中。
值类型:值类型总是分配在它声明的地方ÿ