C#中的堆和栈(一)

原文连接:https://www.c-sharpcorner.com/article/C-Sharp-heaping-vs-stacking-in-net-part-i/

引言

虽然使用.NET Framework时我们不需要主动关心内存管理和垃圾回收,但为了保证程序的性能,对内存管理和垃圾回收还是应该有必要的了解。从根本上理解内存管理的工作方式,也可以帮助我们理解在项目中使用的每一个变量是如何工作的。在本篇中将带你一起了解堆和栈的基础,变量的类型以及他们是如何工作的。

在程序运行的过程中,.NET Framework将对象存储在两个空间里。如果你还不知道,我这就给你介绍一下栈(Stack)和堆(Heap),这俩东西都在帮助我们运行代码。他们寄存在设备的操作内存中,并包含我们程序运行所需要的所有信息。

堆和栈的区别

栈主要负责存储指令,堆主要负责保存对象和数据。

栈就像是一摞盒子,一个压着一个。每当我们调用一个方法(有时候也叫帧"frame")时,就会在栈的顶部压入一个指令用来告诉我们的程序该干什么。我们只能获取到最顶端的那个盒子。当我们最顶端的盒子用完以后(方法执行完毕)就把它扔掉,继续使用早先放进来的顶部的盒子。不同的是,堆是为了存储信息,而不关心命令的执行,所以堆中的任何信息都可以被随时访问到。在堆中没有像栈一样的读写限制。堆就像是我们洗好了但是没有整理的散乱在床上的衣服,我们可以快速的拿到我们想要的。栈就像是我们在壁橱中已经摞好的鞋盒,我们必须拿走上面的,才能得到下面的。

(译者曰:内存中的栈和数据结构的栈的性质是一样的,都是后进先出)

C# Heap(ing) Vs Stack(ing) In .NET

上图中的内容不能正确的表示在内存中的运行情况,只是为了帮助理解堆和栈的区别。

栈是自我维护的,也就是说他们主要关心自己的内存管理。当顶部的盒子已经不再使用以后,就会被取出来。至于堆,则需要考虑垃圾回收(GC),以保持堆的整洁(没有人希望到处都是的脏衣服,还散发出臭臭的味道)。

堆和栈上都有什么?

在代码运行的过程中,我们主要有四种类型的东东被放在堆和栈里面:值类型(Value Types)、引用类型(Reference Types)、指针(Pointers)、指令(Instructions࿰

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值