ILBC 规范
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,?? ? 类 的 链接 工作 完成后,?? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows-server-2008-r2 – 域控制器DCdiag错误 – 无法找到
- windows – 如何增加内存来处理超大Lua表
- PE基础3-资源表-重定位表-TLS表-DLL延迟加载表
- Odata压缩 – 是否有任何支持? (WinRT的WCF数据服务5.0)
- mvvm – 在WinRT XAML UserControl中访问DataContext的位置
- windows – goapp serve:无法找到dev_appserver.py
- Windows -- cmd命令: netstat 和 arp
- 是否可以为Windows为管理员用户创建的标准用户令牌添加权限
- ms-access – 在多用户环境中编程Microsoft Access后端数据
- windows – 如何在git bash中设置正确的本地时区?