随笔分类 - CoreCLR源码探索
摘要:很久没有写过 .NET Core 相关的文章了,目前关店在家休息所以有些时间写一篇新的🤣。这次的文章主要介绍如何在 Linux 上编译调试最新的 .NET Core 5.0 Preview 与简单分析 Span 的实现原理。微软从 .NET Core 5.0 开始把 GIT 仓库 coreclr
阅读全文
摘要:因为最近在群里被问到如何理解 .NET Core 3.0 可卸载程序集,所以就写了这篇简单的分析。 因为时间实在很少,这篇文章只简单的罗列了相关的代码,请配合官方说明文档理解。 另外,书籍《.NET Core 底层原理》预计 11 月出版,出版社比较拖 :O。 链接 可卸载程序集的官方说明文档如下:
阅读全文
摘要:在 "上一篇" 我们对CoreCLR中的JIT有了一个基础的了解, 这一篇我们将更详细分析JIT的实现. JIT的实现代码主要在 "https://github.com/dotnet/coreclr/tree/master/src/jit" 下, 要对一个的函数的JIT过程进行详细分析, 最好的办法
阅读全文
摘要:很多C 的初学者都会有这么一个疑问, .Net程序代码是如何被机器加载执行的? 最简单的解答是, C 会通过编译器(CodeDom, Roslyn)编译成IL代码, 然后CLR(.Net Framework, .Net Core, Mono)会把这些IL代码编译成目标机器的机器代码并执行. 相信大多
阅读全文
摘要:NullReferenceException可能是.Net程序员遇到最多的例外了, 这个例外发生的如此频繁, 以至于人们付出了巨大的努力来使用各种特性和约束试图防止它发生, 但时至今日它仍然让很多程序员头痛, 今天我将讲解这个令人头痛的例外是如何发生的. 可以导致NullReferenceExcep
阅读全文
摘要:在上一篇中我分析了CoreCLR中GC的内部处理, 在这一篇我将使用LLDB实际跟踪CoreCLR中GC,关于如何使用LLDB调试CoreCLR的介绍可以看: 微软官方的文档, "地址" 我在第3篇中的介绍, "地址" LLDB官方的入门文档, "地址" 源代码 本篇跟踪程序的源代码如下: 准备调试
阅读全文
摘要:在这篇中我将讲述GC Collector内部的实现, 这是CoreCLR中除了JIT以外最复杂部分,下面一些概念目前尚未有公开的文档和书籍讲到。 为了分析这部分我花了一个多月的时间,期间也多次向CoreCLR的开发组提问过,我有信心以下内容都是比较准确的,但如果你发现了错误或者有疑问的地方请指出来,
阅读全文
摘要:在前一篇中我讲解了new是怎么工作的, 但是却一笔跳过了内存分配相关的部分. 在这一篇中我将详细讲解GC内存分配器的内部实现. 在看这一篇之前请必须先看完微软BOTR文档中的"Garbage Collection Design", 原文地址是: https://github.com/dotnet/c
阅读全文
摘要:前一篇我们看到了CoreCLR中对Object的定义,这一篇我们将会看CoreCLR中对new的定义和处理 new对于.Net程序员们来说同样是耳熟能详的关键词,我们每天都会用到new,然而new究竟是什么? 因为篇幅限制和避免难度跳的太高,这一篇将不会详细讲解以下的内容,请耐心等待后续的文章 GC
阅读全文
摘要:.Net程序员们每天都在和Object在打交道 如果你问一个.Net程序员什么是Object,他可能会信誓旦旦的告诉你"Object还不简单吗,就是所有类型的基类" 这个答案是对的,但是不足以说明Object真正是什么 在这篇文章我们将会通过阅读CoreCLR的源代码了解Object在内存中的结构和
阅读全文