C#的栈与堆

本文探讨了C#中的堆和栈的概念,包括它们在内存中的分配方式。堆,也称为托管堆,由CLR管理并自动进行垃圾回收。栈主要存放函数参数、局部变量和返回值。此外,文章还讨论了值类型和引用类型的区别,值类型在栈中分配,而引用类型在堆中分配。值类型和引用类型在内存管理和性能上有显著区别,过多的引用类型可能导致频繁的垃圾回收,降低性能。最后,文章简述了堆栈空间分配的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2019年2月21日 (Location:ordos)

  年前在面试Lenovo的时候,面试官问了关于堆和栈的相关问题,一直没有搞清楚栈和堆,此文为解决该困惑。

一、堆和栈的叫法

:在c里面叫堆,在c#里面其实叫托管堆。

:就是堆栈,因为和堆一起叫着别扭,就简称栈了。

托管堆:托管堆不同于堆,它是由CLR(公共语言运行库(Common Language Runtime))管理,当堆中满了之后,会自动清理堆中的垃圾。所以,做为.net开发,我们不需要关心内存释放的问题。

内存堆栈和数据结构堆栈

①数据结构堆栈:是一种后进先出的数据结构,它是一个概念,栈是一种后进先出的数据结构。

②内存堆栈:存在内存中的两个存储区(堆区,栈区)。

栈区:存放函数的参数、局部变量、返回数据等值,由编译器自动释放

堆区:存放着引用类型的对象,由CLR释放

二、值类型和引用类型

1、值类型和引用类型的内存分配。

引用类型:引用类型存储在堆中。类型实例化的时候,会在堆中开辟一部分空间存储类的实例。类对象的引用还是存储在栈中。

值类型:值类型总是分配在它声明的地方ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值