当前位置:首页 > 技术交流 > 随心记 > 正文内容

堆栈的关系、原理、区别以及如何按照自己的方式工作

纵横四海3年前 (2020-11-17)随心记1083

本文是我自己所整理,可能存在错误或争议,欢迎评论指正或讨论!


堆(heap)    栈(stack)

虽然在.net framework不需要内存管理和垃圾回收,但应该了解,有助于解释日常程序编写中变量的行为。

代码执行时,会分配两个内存,堆栈,用来存储代码,帮助运行程序,它们驻留在机器内存中,包含所有代码执行的所需要的信息。

栈负责保存我们的代码执行(或调用)路径,而堆则负责保存对象(或者说数据)的路径。

可以把栈想象成一堆从顶向下堆起来的盒子。每调用一次方法时,我们将应用程序中所要发生的事情记录在栈顶的一个盒子中,每次只能够使用栈顶的那个盒子。

堆的工作原理比较相似,但大多数时候堆用作保存信息而不是保存执行路径,与栈相比堆没有任何访问限制,

Notepad_202011171541_39039.png

栈是自行维护的,也就是说内存自动维护栈,当栈顶的盒子不再被使用,它将被抛出。相反的,堆需要考虑垃圾回收,垃圾回收用于保持堆的整洁性。


栈和堆中主要放置了四种类型的数据:值类型,引用类型,指针,指令。(c#前两个)

值类型:


在C#中,所有被声明为以下类型的事物被称为值类型:

bool 

byte 

char 

decimal 

double 

enum 

float 

int 

long 

sbyte 

short 

struct 

uint 

ulong 

ushort


2.引用类型:


所有的被声明为以下类型的事物被称为引用类型:

class 

interface 

delegate 

object 

string


举例子:


         public int ReturnValue()

          {

               int x = new int();

               x = 3;

               int y = new int();

               y = x;      

               y = 4;          

               return x;

          }


我们将得到值3,很简单,对吧?


假如我们首先使用MyInt类


    public class MyInt

          {

               public int MyValue;

          }


接着执行以下的方法:


         public int ReturnValue2()

          {

               MyInt x = new MyInt();

               x.MyValue = 3;

               MyInt y = new MyInt();

               y =x;                 

               y.MyValue =4;              

               return x.MyValue;

          }


我们将得到什么?...    4!


栈的访问速度快,堆的数据量大,所以慢。




版权声明:本文由纵横四海博客发布,如需转载请注明出处。

部分资源整理自互联网,如侵权请联系站长删除!

本文链接:https://www.fxkgg.com/post/8.html

分享给朋友:

相关文章

session 与 ViewState 的区别

session 是存在服务器端,大量的使用session将导致服务器负担加重.而viewstate由于只是将数据存入到页面隐藏控件里,不再占用服务器资源,因此, 我们可以将一些需要服务器"记...

cookie 和session 的区别

cookie 和session 的区别

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗   考虑...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。