之前对栈(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#中栈和堆的理解的更多相关文章

  1. C++ : 从栈和堆来理解C#中的值类型和引用类型

    C++中并没有值类型和引用类型之说,标准变量或者自定义对象的存取默认是没有区别的.但如果深入地来看,就要了解C++中,管理数据的两大内存区域:栈和堆. 栈(stack)是类似于一个先进后出的抽屉.它的 ...

  2. c语言中静态区,栈,堆的理解

    对于程序员,一般来说,我们可以简单的理解为内存分为三个部分:静态区,栈,堆. 很多书没有把把堆和栈解释清楚,导致初学者总是分不清楚. 其实堆栈就是栈,而不是堆. 堆的英文是heap:栈的英文是stac ...

  3. .NET中栈和堆的比较 #1

    原文出处:http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.a ...

  4. java中栈,堆,方法区

    最近在看面试题复习javaee,所以在这里对栈,堆,方法区做一下整理 参考了https://www.cnblogs.com/hqji/p/6582365.html 1.栈 每个线程包含一个栈区,栈中只 ...

  5. 关于c语言中栈和堆释放的问题

    #include<iostream> #include<string> using namespace std; int main() { string st; cin> ...

  6. Java中栈和堆讲解

    之前对JVM中堆内存和栈内存都是一直半解,今天有空就好好整理一下,用作学习笔记. 包括Java程序在内,任何程序在运行时都是要开辟内存空间的.JVM运行时在内存中开辟一片内存区域,启动时在自己的内存区 ...

  7. C#栈、堆的理解(2)

    接上一遍博文有关值类型和引用类型的相关概念. 所有值类型数据存放:栈(内存) 引用类型的数据存放:堆(内存) 栈:可以认为是一本书的目录部分称其为栈.栈可快速检索,运行速度比堆大,而且栈的空间小得多. ...

  8. java中栈、堆和方法区的关系

    另外,常量池在方法区中

  9. 栈 堆 stack heap 堆内存 栈内存 内存分配中的堆和栈 掌握堆内存的权柄就是返回的指针 栈是面向线程的而堆是面向进程的。 new/delete and malloc/ free 指针与内存模型

    小结: 1.栈内存 为什么快? Due to this nature, the process of storing and retrieving data from the stack is ver ...

随机推荐

  1. 动态树之link-cut tree

    说好的专题... lct的一些概念看论文 杨哲<QTREE解法的一些研究> 简单易懂. 首先不要把lct想象得很难,其实很水的.lct就是很多splay树维护的树... lct的acces ...

  2. Ubuntu根目录下各文件夹的功能详细介绍

    Ubuntu的根目录下存在着很多的文件夹,但你知道他们都存放着哪些文件呢?这些是深入了解Ubuntu系统必不缺少的知识,本文就关于此做一下介绍吧. /bin/    用以存储二进制可执行命令文件. / ...

  3. C#引用COM对象,报错:《类型 *** 未定义构造函数, 无法嵌入互操作类型 *** 。请改用适用的接口》的解决办法。

    错误信息: 1.类型“SQLDMO.BackupClass”未定义构造函数 2.无法嵌入互操作类型“SQLDMO.BackupClass”.请改用适用的接口. 代码如下:                ...

  4. jsp中如何取得当前页面完整的URL

    JSP页面 <% String url = request.getScheme()+"://"+ request.getServerName()+request.getReq ...

  5. OpenCV 3.0 VS2010 Configuration

    Add in the system Path: C:\opencv\build\x86\vc10\bin; Project->Project Property->Configuration ...

  6. Html - Footer

    通用的Footer代码片段 <style> #footer { padding: 20px; text-align: center; background-color: #666; bor ...

  7. windows 通过ssh连接到Linux主机

    1. 确定Linux主机已经开启了ssh功能. 1.1--确认sshserver是否启动 ps -e |grep ssh 如果只有ssh-agent那ssh-server还没有启动,需要/etc/in ...

  8. io资料

    jitsi red5 apache meeting2 openmeeting2 openfire http://www.onlycoder.net/ 在视频会议领域,有许多可以值得参考的开源项目,这些 ...

  9. poj2387 初涉最短路

    前两天自学了一点点最短路..看起来很简单的样子... 就去kuangbin的专题找了最简单的一道题练手..然后被自己萌萌的三重for循环超时虐的不要不要的~ 松弛虽然会但是用的十分之不熟练... 代码 ...

  10. [ZZ] HD7970GE vs GTX770

    AMD/NV烽烟再起!HD7970GE大战GTX770 泡泡网显卡频道7月8日 高端市场肩负展示厂商实力,树立品牌形象的任务,历来是兵家必争之地.从GTX680 VS HD7970,HD7970GE ...