.NET中C#堆VS栈
王老欠儿
这个作者很懒,什么都没留下…
展开
-
.NET中C#堆VS栈:Part I
尽管在.NET framework中我们不必担心内存管理和垃圾回收(GC),但是我们仍然要关注内存管理和GC,以优化程序性能。并且,对内存管理的工作原理有一个基本的了解,可以帮助我们解释程序中变量的行为。这篇文章中,会带来堆和栈的基础知识,变量类型以及一些变量为什么是这样的。 当你的代码运行时,.NET framework有两个地方用于存储。如果你对它们还不熟悉,我会为你介绍堆和栈。堆和栈在执行...翻译 2018-08-06 14:41:52 · 235 阅读 · 0 评论 -
.NET中C#堆VS栈:Part II
在上一部分中覆盖了堆栈的基本功能以及程序执行中变量类型和引用类型的分配。也讲到了指针的基本概念。 参数 这是代码执行时发生的详细情况。在第一部分中也提到了函数被调用时发生的事情,接下来我们就深入到细节 当函数被调用时发生了什么: 在栈上为必要的函数信息分配内存(叫做栈帧),这包括调用地址(一个指针),主要是一个GOTO指令,当线程结束执行函数后知道应该返回到哪里继续执行。 函数参数被co...翻译 2018-08-08 11:10:10 · 120 阅读 · 0 评论 -
.NET中C#堆VS栈:Part III
所谓复制 为了更好的说明问题,我们来对比一下堆上的值类型与引用类型。首先看一下值类型,下面的类和结构体,有一个Dude类包含Name和两个shoe属性,一个CopyDude()方法用来创建新的Dude实例。 public struct Shoe{ public string Color; } public class Dude { public string Name; ...翻译 2018-08-08 11:27:57 · 105 阅读 · 0 评论 -
.NET中C#堆VS栈:Part IV
描述 让我们从GC的视角看一下这个问题。如果要可靠的找出垃圾,我们需要一个高效的方法。显然,我们需要决定哪些是垃圾,哪些不是。为了确定哪些需要保留,首先我们假设所有没有被使用的都是垃圾。设想一下我们有两个朋友:JIT和CLR,他们负责跟踪什么正在使用并且给出一个保存清单。我们称这份清单为根清单,因为我们使用它作为起始点。我们需要保存一个主清单用来描述我们想保留的东西都在哪。那些清单中保留的...翻译 2018-08-31 17:51:22 · 174 阅读 · 0 评论