wap网站方案,网站建设文化教程,广州网站建设网站,wordpress自定义文章类型标签深入浅出图解C#堆与栈 C# HeapingVS Stacking第一节 理解堆与栈 [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理](https://mp.csdn.n… 深入浅出图解C#堆与栈 C# HeapingVS Stacking第一节 理解堆与栈 [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理](https://mp.csdn.net/mdeditor/101022949#)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第三节 栈与堆值类型与引用类型](https://mp.csdn.net/mdeditor/101023885#)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第四节 参数传递对堆栈的影响 1](https://mp.csdn.net/mdeditor/101026168#)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第四节 参数传递对堆栈的影响 2](https://mp.csdn.net/mdeditor/101027584#)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第五节 引用类型复制问题及用克隆接口ICloneable修复](https://mp.csdn.net/mdeditor/101028008#)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第六节 理解垃圾回收GC提搞程序性能](https://mp.csdn.net/mdeditor/101029557#)第一篇堆与栈的理解前言简介堆与栈不同点堆和栈中都包含什么值类型引用类型指针指令 引用 深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈
深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理
深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第三节 栈与堆值类型与引用类型
深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第四节 参数传递对堆栈的影响 1
深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第四节 参数传递对堆栈的影响 2
深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第五节 引用类型复制问题及用克隆接口ICloneable修复
深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第六节 理解垃圾回收GC提搞程序性能
第一篇堆与栈的理解
前言
.Net Framework 中我们不必考虑内在管理和垃圾回收(GC)但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外了解内存管理可以帮助我们理解在每一个程序中定义的每一个变量是怎样工作的。 简介
在程序运行时.NETFramework把对象存储在内存中的两个位置堆与栈并且他们都会帮助我们更好的运行程序。堆与栈寄存在电脑的操作内存中并包含我们需要的信息使整个程序运行正常。 堆与栈不同点
栈 或多或少负责追踪正在程序中运行的代码。 堆 或多或少负责跟踪程序对象或数据。
栈把它想像成叠在一起的盒子像搭积木一样。每一次调用一个方法就会放在最上面叠一个盒子用来跟踪程序运行情况我们只能使用栈中叠在 最上面的盒子里的东西。当某一最上面的盒子里的代码执行完毕如方法执行完成就把它扔掉并继续去使用下一个盒子。
堆与栈类似只是它是用来保存信息而不是跟踪执行。所以堆里的任何信息都可以在任何时间被访问。有了堆访问信息没有约束而不像堆只能访问最上层的盒子。
堆的情况就像你把一堆刚洗完的衣服放在床上还没有时间来的及收走你可以迅速拿到你想要的衣服。栈的情况就像你叠在一起的鞋盒子你需要拿走最上面的盒子才能拿到下一个盒子。 注意 上图并不是真正的内存运行情况只是为了让大家区分堆与栈。 栈会自我管理它有自己的内存管理机制。当最上面的盒子不在使用时会自动被扔掉。 堆相反我们要控制它的垃圾回收GC。我们要去管理堆是否干净就像管理床上的脏衣服。你若不手动扔掉它就会在床上变臭。 堆和栈中都包含什么
当程序执行时我们主要有四种类型的东西放进堆和栈里值类型引用类型指针指令。
值类型
boolbytechardecimaldoubleenumfloatintlongsbyteshortstructuintulongushort
它们都是衍生于System.ValueType
引用类型
classinterfacedelegateobjectstring
他们都是衍生于system.Object 当然object就是System.Object
指针
第三种被放于内存管理体制中的是类型的引用。这个引用通常叫做指针。我们并不具体的使用指针他们由CLR公共语言运行库是托管代码执行核心中的引擎管理。一个指针引用不同于引用类型在于当我们说某个东西是引用类型时意思是我们通过指针访问它。指针是内存中的一块空间它指向内存中的另一个空间。指针就像我们放入栈和堆中的任何其他东西一样占用空间它的值要么是内存地址要么是null。
指令
我们会在后面的文章中介绍指令怎么工作。
引用
原文链接https://www.c-sharpcorner.com/article/C-Sharp-heaping-vs-stacking-in-net-part-i/
译文连接https://blog.csdn.net/leewhoee/article/details/16933173