.Net8的AOT引导程序BootStrap

.Net8的本地预编机器码AOT,它几乎进行了100%的自举。微软为了摆脱C++的钳制,做了很多努力。也就是代码几乎是用C#重写,包括了虚拟机,GC,内存模型等等。而需要C++做的,也就仅仅是引导程序,本篇通过代码来看下这段至关重要的引导程序的运作模式。,所谓的引导程序,也就是引导被ILC生成的目标文件编译成可执行文件,然后在相应的平台上(MacoS/Linux/Win)进行二进制执行。这里以微软自家的Windows平台为例来剖析下这段引导程序。,引导程序分为两个阶段,其一初始化运行时,其二运行托管的Main入口代码。分别看下,最后就是代码展示了。,这个很好理解,你如果需要运行.Net程序那么必须有一个运行的环境,第一步就是初始化这个运行环境。它主要包括以下步骤:,环境变量的初始化主要是指设置的环境变量,对于GC或者JIT的控制。在这里进行一个初始化和区分。比如开启了了内存映射的环境变量
DOTNET_EnableWriteXorExecute=1.它就是此时被AOT识别并进行区分。,AOT程序需要用到哪些模块,比如,等一些模块需要用到,那么这里进行注册下,以便后续调用。,这里的模块初始化实际上,R2R的部分预编译函数替代。,.Net里面托管的Main函数是一切托管函数的入口点,所以托管Main入口是必须设置正确,并且能够运行完整托管代码。本例展示的托管Main如下:,上面只是一些概念,具体的行为落实,还得代码来。这里看下BootStrap引导程序的代码。,节存变量,主要是在初始化运行时的模块初始化阶段需要用到,节合并,这里主要是然链接器进行一个节的合并,节声明函数,实例化运行时注册AOT模块的时候要用到,AOT运行环境的初始化,托管入口,以上是.Net8的AOT引导程序的大致运作模式。,完整代码在GitHub:https://github.com/tangyanzhi/jianghupt/releases/download/Aot_bootstrap/AOT-BootStrap.rar,

文章版权声明

 1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/29220.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年6月23日
下一篇 2023年7月15日