[c#基础]堆和栈

news/2024/7/20 14:48:08 标签: 内存管理, c#, 数据结构与算法

前言

    堆与栈对于理解.NET中的内存管理、垃圾回收、错误和异常、调试与日志有很大的帮助。垃圾回收的机制使程序员从复杂的内存管理中解脱出来,虽然绝大多数的C#程序并不需要程序员手动管理内存,但这并不代表程序员就无需了解分配的对象是如何被回收的,在一些特殊的场合仍需要程序员手动进行内存管理

堆栈基础

什么是栈(stack)?

  栈是一个内存数组,是一个LIFO(last-in first-out,后进先出)的数据结构。由高内存地址指向低内存地址,并且内存分配是连续的。

  栈存储几种类型的数据:值类型的值,程序当前的执行环境和传递给方法的参数。

  栈的特征:数据只能从栈的顶部插入和删除;把数据放入栈顶称为入栈(push);把数据从栈顶移除称为出栈(pop);

  

  什么是托管堆(heap)?

  堆是一块内存区域,在这里可以分配大块的内存给某类型的数据。与栈不同,堆里的内存可以任意的顺序存入和移除。

  虽然程序可以在堆里保存数据,却不能显示的删除它们。CLR的自动GC(垃圾回收机制)在判断出代码不在访问某数据项时,自动清除无主的堆数据。

  

值类型和引用类型

   数据项的类型定义了存储数据的内存大小、组成该类型的数据成员以及该类型能执行的函数。类型还决定了对象在内存中的存储位置--栈和堆。

   类型分为:值类型和引用类型。两种类型在内存中的存储方式不同。

   如果类型不是其他类型的成员,对于值类型,数据存储在栈中,对于引用类型,实际数据存储在堆中引用存储在栈中。

  

  如果类型是引用类型的成员,如Student类中包含int类型的年龄和string类型的名称。实例化一个学生对象,则这个对象的引用存放在栈中,其真实数据(包含年龄和名称)则被存入堆中。同时名称由于是引用类型,依然被划分为两块内存区域,一块存放引用,一块存放真实数据。

  

  C#中的类型划分如下图:

  

本文来自:http://www.cnblogs.com/dmeiyang002/p/3659694.html

博客地址:http://www.cnblogs.com/wolf-sun/
博客版权:本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。

转载:http://www.cnblogs.com/wolf-sun/p/3810689.html

http://www.niftyadmin.cn/n/1291940.html

相关文章

wi-fi局域网文件服务器,使用Wi-Fi进行局域网通信

使用Wi-Fi进行局域网通信光环板之间可以组成局域网,组成局域网的设备之间可以相互通讯,使用一个光环板就可以控制其他光环板。用光环板A控制光环板B让我们新建一个项目,使用两块光环板,实现用光环板A控制光环板B。启动光环板A的局…

mysql添加sequence_mysql实现sequence功能的代码

mysql实现sequence功能1.建立sequence记录表CREATE TABLE sys_sequence ( seq_name varchar(50) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, min_value int(11) NOT NULL, max_value int(11) NOT NULL, current_value int(11) NOT NULL, increment_value int(11) NOT …

elementui 嵌套表单验证_element-ui的el-table和el-form嵌套使用表单校验

表格中嵌套使用表单验证表格是el-table自动获取的后台数据,每行都有el-input的验证,这样一个rules的规则就不能匹配到每一行,所以要是用动态的prop和rules规则需求如下,要对告警阈值进行验证废话不多说,上代码ref"…

Bootstrap 字体图标引用示例

Bootstrap 字体图标引用示例&#xff1a; <span class"glyphicon glyphicon-wrench"></span>&#xff0c;glyphicon-wrench是一个扳手的图标。 言小鱼遇到引用引用Bootstrap Glyphicons字体图标不显示的问题。找了半天也不知道是哪里出错了&#xff0c;…

系统dhcp服务器设置方法,dhcp服务器设置方法

导读&#xff1a;DHCP服务器是一台安装其专用的操作系统的计算机&#xff0c;它的操作系统是Windows 2000 &#xff0c;DHCP服务器必须同意TCP协议的安装&#xff0c;还需要其他一些内容例如默认网关的设置&#xff0c;DHCP是一个提供服务的设备组件&#xff0c;我们必须将它进…

mysql第六章回顾与概述_管理经济学之第六章(成本与利润概述)

一、成本与利润概述1、成本的含义&#xff1a;成本&#xff1a;企业进行生产经营活动所使用的生产要素的价格&#xff0c;或生产要素的所有者必须得到的报酬或补偿。生产要素的价格人的工资2、成本的分类固定成本和变动成本显性成本和隐性成本会计成本和机会成本增量成本和沉没…

mpstat命令和/proc/stat文件

mpstat&#xff0c;top等命令都能显示出当前cpu的平均负载。这里总结一下实现原理。和磁盘容量相同&#xff0c;主要信息依然来自proc文件夹中的文件。 /proc/stat文件 文件中包含了所有cpu活动信息&#xff0c;所有值都是从系统启动开始累计到当前的值。 cat /proc/stat 可以看…

怎么看曲线有没有斜渐近线_关于曲线的斜渐近线

第30卷第3期高师理科学刊Vol.30No.32010年5月JournalofScienceofTeachers′CollegeandUniversityMay2010文章编号&#xff1a;1007-9831(2010)03-0035-02关于曲线的斜渐近线崔瑞霞(河南省人口和计划生育干部学院基础部&#xff0c;河南郑州450008)摘要&#xff1a;在以往对曲线…