加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

ILBC 规范

发布时间:2020-12-14 02:33:44 所属栏目:Windows 来源:网络整理
导读:ILBC 规范: ? 加载程序集: ILBC 程序集 有 2 种,? 1? Byte Code 程序集,? ?扩展名 为? .ilb,? ?表示? “ILBC Byte Code”? 。 2? Native Code 程序集, 扩展名 遵循? 操作系统 定义的 动态链接库 规范, 比如 Windows 上就是 .dll 文件, ? ? Native Co

ILBC 规范:

?

加载程序集:

ILBC 程序集 有 2 种,?

1? Byte Code 程序集,? ?扩展名 为? .ilb,? ?表示? “ILBC Byte Code”? 。

2? Native Code 程序集, 扩展名 遵循? 操作系统 定义的 动态链接库 规范, 比如 Windows 上就是 .dll 文件,

? ? Native Code 程序集? 就是? 操作系统 定义的 动态链接库? 。

?

假设 操作系统 是 Windows,? 程序集 名字 是 A,? 加载 A 的 过程 是:

在 当前目录 下 先查找? A.ilb, 若存在 则 JIT 编译 A.ilb 为 本地代码 A.dll, 加载 A.dll,

若找不到 A.ilb, 则找 A.dll, 若存在 则 加载 A.dll 。

加载 本地库? A.dll? 的 方式 遵循 操作系统 定义的 动态链接 规范? 。

?

JIT 编译 A.ilb 为 本地代码 并 加载 的 过程 可以在 内存中 完成,? 不一定要 生成 文件 A.dll? (如果 技术上 可以实现 在 内存 中加载的话)。

?

高级语言(D#) 编译 的 过程:

高级语言(D#) 编译 有? 2 种方式,

?

1? AOT,? 高级语言(D#) 编译器 先根据 高级语言(D#) 源代码? 生成? ? C 语言 中间代码,? 再由? InnerC (InnerC to Byte Code)? 编译为表达式树, 再由? InnerC(Byte Code to Native Code) 把 表达式树 生成为? Native Code? 。? Native Code 是一个 本地库, 比如? .dll? 。

?

2? JIT ,? ?高级语言(D#) 编译器 先根据 高级语言(D#) 源代码? 生成? ? C 语言 中间代码,? 再由? InnerC (InnerC to Byte Code)? 编译为表达式树, 把?表达式树 序列化 得到 Byte Code, 将 Byte Code 保存为 ilb 文件 即 得到 Byte Code 程序集(.ilb)? 。

? ? .ilb? 在 运行的时候 由? ILBC 运行时 的? ?InnerC (Byte Code to Native Code)? ?把? Byte Code? 反序列化 为 表达式树, 再把 表达式树 编译为? Native Code? 。

?

链接程序集:

ILBC 的 链接 是 类似? .Net / C#? 的 动态链接,

ILBC 的 链接 以 程序集 为 单位,? 采用 延迟加载(Lazy Load) 的方式, 只有用到 程序集 的时候才加载, “用到” 是指 第一次 用到 程序集 里的 类(Class) 。

将 程序集 加载 到 应用程序 以后, 对 程序集 里的 类(Class) 也采用? 延迟加载(Lazy Load) 的方式,

第一次 用到 类 的 时候才会 进行 类 的 链接工作,?

假设 有 2 个程序集 A 、B,??

?

类 的 链接 工作 完成后,??

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读