前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.Net8的R2R(ReadyToRun)结构简析

.Net8的R2R(ReadyToRun)结构简析

作者头像
江湖评谈
发布2023-08-31 21:22:51
3170
发布2023-08-31 21:22:51
举报
文章被收录于专栏:天下风云天下风云

前言

R2R是一种折中于JIT和AOT之间的技术,什么意思呢?JIT是全即时编译,也即所有构造的内存模型,内存数据,函数头皆在内存当中,JIT关闭则所有数据消失。AOT呢,即所有内存模型,内存数据,函数头皆存储在动态链接库或者可执行文件里面,也即是本地存储。这导致了两个极端,R2R把全在内存和全在本地折中成了一部分编译成本地机器码,一部分通过JIT即是编译。本篇来看下R2R部分知识。以下以.Net8为蓝本。

概括

R2R结构 托管DLL(托管Exe只是引导)的R2R入口在.Net目录,也即元数据头和数据流齐平的项的Native头处。 非托管Exe(DLL)也即是AOT的R2R在C++引导程序BootStrap的目标文件obj(也可以是最终的Exe)的段.modules$A的全局变量__modules_a数组某个所引处,它需要在链接器输入附加AOT依赖项才有R2R数据。无论托管或非托管它们的R2R结构都是一样的。具体如下: 一:R2R头

代码语言:javascript
复制
struct ReadyToRunHeader
{
    uint32_t                Signature;// r2r固定字符
    uint16_t                MajorVersion; //大版本号
    uint16_t                MinorVersion; //小版本号
    uint32_t                Flags; //r2r标志
    uint16_t                NumberOfSections;//当前r2r节的个数
    uint8_t                 EntrySize;//未知
    uint8_t                 EntryType;//未知
};

二:R2R节数据

R2R头后面跟着无数个R2R节数据,主要如下所示:

代码语言:javascript
复制
struct ModuleInfoRow
{
   int32_t SectionId; //节的ID号
   int32_t Flags; //节的标志
   void * Start; //节的起始地址
   void * End; //节的结束地址
}

三:原理 R2R头后面跟着无数个R2R节数据,遍历循环节数据,找到自己想要的数据,然后执行。比如说想要执行某个函数,那么通过R2R头找到R2R节数据,然后通过节数据的ID号,找到节的起始地址,通过起始地址找到要执行的函数头的地址,跳转到函数头进行执行。 一般的来说的话,函数头的地址在节数据的

代码语言:javascript
复制
ReadyToRunSectionType::RuntimeFunctions
代码语言:javascript
复制
节上。因为这个节上面可能存在多个函数头,所以具体到某
个函数调用,需要先获取到这个函数在节上面的索引,然后
才可以获取到函数头地址。为啥JIT和AOT上都有R2R调用,
因为JIT为了提高首次编译的性能所以引入了R2R技术,
AOT引导程序BootStrap通过全局变量数组存储的R2R头,
也是本地调用的一种。所以他们都会拥有R2R操作


结尾

作者:江湖评谈

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-07-18,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 江湖评谈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 概括
  • 结尾
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com