c#中栈和堆的理解
之前对栈(stack)和堆(heap)的认识很模糊,今天看了一篇关于堆栈的文章《译文---C#堆VS栈》后,仿佛有种拨开云雾见青天的感觉,当然只是一些浅显的理论的认识,这里做一些简单的记录,方便自己记忆理解,同时也可以供大家参考!
1.栈(stack)和堆(heap)的事例理解
在内存中,栈(stack)和堆(heap)可以理解为两个存储容器。
栈是一个先进后出顺序排列的容器,比如一垛蒸笼包(如图1-1),最后一笼是最后放上去的,只有把最后一笼吃完或拿出来,才能继续吃下面的,依次执行。
堆也是按一定顺序排列的容器,比如你的衣橱(如图1-2),排放是整洁有序的,但是你拿任意一件衣服,不用动其他衣服,能快速的拿到我们想要的衣服。
图1-1 图1-2
2.堆和栈上的垃圾回收机制
栈有自我维护特性,执行完语句马上释放不会造成资源泄漏。
堆需要GC(垃圾回收器 Garbage Collection)不定时的回收已不再使用的资源则需,并且符合GC回收的规则,很多堆上的内容在程序退出前都没有被回收,很可能是无意中某处还保留着内容的引用导致,这将严重影响性能,GC回收一般发生在程序内存不够用时,否则不会发生,除非手动调用GC强制执行回收资源。
3.栈(stack)和堆(heap)中存储的数据类型
这里的数据类型特指值类型(基本数据类型,结构,数组)和引用类型(类,string,object,接口,委托)。
值类型存储在栈或堆中取决于声明的位置,引用类型总是存储在堆上。
c#中栈和堆的理解的更多相关文章
- C++ : 从栈和堆来理解C#中的值类型和引用类型
C++中并没有值类型和引用类型之说,标准变量或者自定义对象的存取默认是没有区别的.但如果深入地来看,就要了解C++中,管理数据的两大内存区域:栈和堆. 栈(stack)是类似于一个先进后出的抽屉.它的 ...
- c语言中静态区,栈,堆的理解
对于程序员,一般来说,我们可以简单的理解为内存分为三个部分:静态区,栈,堆. 很多书没有把把堆和栈解释清楚,导致初学者总是分不清楚. 其实堆栈就是栈,而不是堆. 堆的英文是heap:栈的英文是stac ...
- .NET中栈和堆的比较 #1
原文出处:http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.a ...
- java中栈,堆,方法区
最近在看面试题复习javaee,所以在这里对栈,堆,方法区做一下整理 参考了https://www.cnblogs.com/hqji/p/6582365.html 1.栈 每个线程包含一个栈区,栈中只 ...
- 关于c语言中栈和堆释放的问题
#include<iostream> #include<string> using namespace std; int main() { string st; cin> ...
- Java中栈和堆讲解
之前对JVM中堆内存和栈内存都是一直半解,今天有空就好好整理一下,用作学习笔记. 包括Java程序在内,任何程序在运行时都是要开辟内存空间的.JVM运行时在内存中开辟一片内存区域,启动时在自己的内存区 ...
- C#栈、堆的理解(2)
接上一遍博文有关值类型和引用类型的相关概念. 所有值类型数据存放:栈(内存) 引用类型的数据存放:堆(内存) 栈:可以认为是一本书的目录部分称其为栈.栈可快速检索,运行速度比堆大,而且栈的空间小得多. ...
- java中栈、堆和方法区的关系
另外,常量池在方法区中
- 栈 堆 stack heap 堆内存 栈内存 内存分配中的堆和栈 掌握堆内存的权柄就是返回的指针 栈是面向线程的而堆是面向进程的。 new/delete and malloc/ free 指针与内存模型
小结: 1.栈内存 为什么快? Due to this nature, the process of storing and retrieving data from the stack is ver ...
随机推荐
- .NET中的视图和过滤器 (DefaultView和RowFilter)
NET中的视图和过滤器 (DefaultView和RowFilter) ADO.NET中有一层对象,用来创建任意数据源的抽象模型.其中包括DataSet,DataTable,DataRow,DataV ...
- ios cocos2d TexturePacker生成文件后的使用方法
(1)将*.pvr.ccz文件转换为CCSpriteBatchNode (2) 将对应的plist文件读到CCSpriteFrameCache中 (3) 从CCSpriteFrameCache获取 ...
- 套题整理 Orz DXY
弱弱的DXY 题目描述 DXY太弱了,以至于他已经不知道要如何解决调整一个数列的使得他变成一个严格上升序列. 输入格式 第 1 行,1 个整数 N 第 2 行,N 个整数 A1,A2,...,AN 输 ...
- 【BZOJ】1202: [HNOI2005]狡猾的商人(并查集+前缀和)
http://www.lydsy.com/JudgeOnline/problem.php?id=1202 用并查集+前缀和. 前缀和从后向前维护和,并查集从前往后合并 对于询问l, r 如果l-1和r ...
- 使用mutt+msmtp在Linux命令行界面下发邮件
mutt命令执行了却发送不了邮件, 搜索了一会才明白原来是mutt需要一个发信的程序, msmtp刚好是一个不错的选择. 1. apt-get install mutt msmtp (安装过程中会弹出 ...
- 对于flat_interface与public_interface的理解
对于这两个interface含义的理解一波三折,下面我把各种理解都记录下来. 2014-9-23 #可以把flat_interface理解为Openstack整套生态系统内部的网络接口,内部各 ...
- Jquery&JS简单选项卡
结果,如图 为了明显,用绿色+红色 第一步:静态布局 先写html代码和css样式 要点一: ul li都为块级元素,可以用height,但是里面字体不居中,我们用line-height,即达到居中 ...
- 新浪SAE数据库连接demo和说明
<?php $con = mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS); // ...
- 19. 求平方根序列前N项和
求平方根序列前N项和 #include <stdio.h> #include <math.h> int main() { int i, n; double item, sum; ...
- Linux 计划任务 Crontab 笔记与总结(4)crontab 的日志
/var/log/cron 文件保存 cron 的任务执行记录 cd /var/log/ ls -l cron* 会发现每天都会有 cron 日志的变化 使用 tail -f cron 能够查看今天的 ...