bitcode 和 bytecode的区别是什么

bitcode 和 bytecode的最大的区别是LLVM IR是SSA的,使用寄存器模型,而Java Bytecode是栈模型。对于编译器来说,栈模型是更好做的,也就是说更容易程序编写的。然而其实寄存器模型,性能才是更好的,所以很多编译器的中间语言都有寄存器模型。

bitcode 和 bytecode的区别是什么-Worktile社区

最大的区别是LLVM IR是SSA的,使用寄存器模型,而Java Bytecode是栈模型。对于编译器来说,栈模型是更好做的,也就是说更容易程序编写的。然而其实寄存器模型,性能才是更好的,所以很多编译器的中间语言都有寄存器模型,同时为了程序编写的方便也有栈模型的中间语言,然后由栈模型的中间语言L1转换到寄存器模型的中间语言L2,具体的可以参看鲸书名列前茅章,那里面谈了中间语言的选择。

bitcode是被编译程序的一种中间形式的代码。包含bitcode配置的程序将会在App store上被编译和链接。bitcode允许苹果在后期重新优化程序的二进制文件,而不需要重新提交一个新的版本到App store上。bitcode是LLVM中的术语,其诞生完全是LLVM社区对Java中bytecode的恶搞。从设计上来说,它们是类似的概念,都是中间表示的二进制格式,只不过bytecode专门为JVM设计的,而bitcode是LLVM IR的二进制形式。

bytecode是一种包含执行程序,由一序列 op 代码/数据对组成的二进制文件。是一种中间码。字节码(Byte-code)是一种包含执行程序、由一序列 op 代码/数据对组成的二进制文件。字节码是一种中间码,它比机器码更抽象。它经常被看作是包含一个执行程序的二进制文件,更像一个对象模型。字节码被这样叫是因为通常每个 opcode 是一字节长,但是指令码的长度是变化的。每个指令有从 0 到 255(或十六进制的: 00 到FF)的一字节操作码,被参数例如寄存器或内存地址跟随。

延伸阅读:

什么是bitcode?

研究bitcode之前需要先了解一下LLVM,因为bitcode是由LLVM引入的一种中间代码(Intermediate Representation,简称IR),它是源代码被编译为二进制机器码过程中的中间表示形态,它既不是源代码,也不是机器码。从代码组织结构上看它比较接近机器码,但是在函数和指令层面使用了很多高级语言的特性。

LLVM是一套优异的编译器框架,目前NDK/Xcode均采用LLVM作为默认的编译器。LLVM的编译过程可以简单分为3个部分:

前端(Frontend),负责把各种类型的源代码编译为中间表示,也就是bitcode,在LLVM体系内,不同的语言有不同的编译器前端,最常见的如clang负责c/c++/oc的编译,flang负责fortran的编译,swiftc负责swift的编译等等

优化(Optimizer),负责对bitcode进行各种类型的优化,将bitcode代码进行一些逻辑等价的转换,使得代码的执行效率更高,体积更小,比如DeadStrip/SimplifyCFG

后端(Backend),也叫CodeGenerator,负责把优化后的bitcode编译为指定目标架构的机器码,比如X86Backend负责把bitcode编译为x86指令集的机器码。

文章标题:bitcode 和 bytecode的区别是什么,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37934

(1)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编小编认证作者
上一篇 2023年2月13日 上午2:42
下一篇 2023年2月13日 上午2:45

相关推荐

  • 什么是主权区块链

    主权区块链是以分布式账本为基础,以规则和共识为核心,以国家主权为前提的区块链。2020年7月,大数据战略重点实验室全国科学技术名词审定委员会研究基地收集审定的名列前茅批108条大数据新词,报全国科学技术名词审定委员会批准,准予向社会发布试用。 主权区块链(sovereignty blockchain…

    2023年1月27日
    58100
  • okr用什么软件好

    比较好的okr软件:1、Worktile;2、PingCode Goals;3、Inspire;4、Profit.co;5、Leapsome;6、Kallidus Perform;7、Weekdone;8、Monday.com。Worktile 是国内较早也是非常成熟的OKR工具, 覆盖了OKR设定…

    2023年2月24日
    74800
  • devops属于什么行业

    探讨DevOps之归属领域,我们首先需认识到其为一套跨界融合的实践方法论,旨在加速软件开发与运维的协同作业、提升交付效率。其核心在于促进开发(Development)与运维(Operations)的无缝对接,以及快速、高效地交付和维护软件产品。我们将重点讨论如下:1、技术与文化的双重属性,及对促进跨…

    2024年3月26日
    5500
  • oa 中信建投

    标题:中信建投OA解析 针对中信建投在线评估(OA)的解析强调以下核心观点:1、准备工作至关重要,需详尽了解考查方向与内容;2、练习处理数据分析与逻辑题型,增强应对各种题型的能力;3、加强金融知识学习与实时关注金融市场动态;4、提高快速阅读理解与英文水平,以便应对可能出现的英语题目。 准备工作的重点…

    2024年1月17日
    27500
  • 勾股oa系统

    标题:勾股OA系统深度剖析 摘要:勾股OA系统为组织赋予高效协同、安全管理、流程优化3个核心优势。该系统适用于企业内部信息化管理,支持多种设备访问,保障信息传输和数据保密性。具体而言,流程优化是系统节省时间、提升效率不可或缺的一环,通过预设流程模板和灵活的流程设计,企业能够针对不同部门及业务需求制定…

    2024年1月16日
    23900
  • Jira问题与Epic的区别

    Jira中问题与震撼大事件(Epic)的差异主要体现在四个方面:1、范畴与尺寸、2、用途与目标、3、组织方法、4、时间跨度。1、范畴与尺寸:震撼大事件是一类包罗万象的需求或者任务组合,它们往往包括多个小的工作事项;这些小工作事项称为问题。震撼大事件的宏观尺度是其鲜明特征。 在对震撼大事件进行详细描述…

    2024年1月3日
    49500
  • Springboot自动装配的原理是什么

    Spring Boot的自动配置是通过@EnableAutoConfiguration注解实现的。当该注解被标记在一个类上时,Spring Boot就会根据应用程序中所引入的依赖,自动配置应用程序所需的Bean、服务和其他组件。 Spring Boot自动配置的概念 Spring Boot自动配置是…

    2023年3月2日
    1.3K00
  • 云原生架构下的数据持久化策略

    开门见山地回应您的问题,云原生架构下的数据持久化策略涉及几个核心要素:1、状态保持与无状态、2、容器存储选项、3、数据管理与保护、4、多云与混合云环境适应性、5、自动化与弹性伸缩。而在这些要素中,状态保持与无状态这一部分是基础,它涉及到开发者在设计系统时需要谨慎考虑如何将状态性组件与无状态服务分离,…

    2023年12月28日
    21300
  • 云原生应用的API管理如何实现

    云原生应用的API管理的实现步骤包括API定义和设计、API开发和管理、API测试和文档化、API网关、API生命周期管理、API目录和管理平台、API安全性和合规性等。详细介绍:1、API定义和设计,在云原生应用的开发过程中,API的定义和设计是非常重要的一步,良好的API设计可以提高应用程序的可维护性、可扩展性和可重用性;2、API开发和管理,在确定了API的设计后,可以开始进行API的开发和管理等等。

    2023年10月27日
    38600
  • 谈谈工程项目如何进行采购管理

    工程项目采购管理是确保按时、按预算完成项目的关键环节。它涉及到选择合适的供应商、采购计划的制定、采购合同的管理等多个方面。其中,选择合适的供应商是至关重要的一步,因为它直接影响到项目成本、进度和质量。在选择供应商时,不仅要考虑价格因素,还需评估供应商的信誉度、质量控制能力、交货能力以及售后服务。通过…

    2024年4月11日
    4900

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部