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

相关推荐

  • 商业智能产品主要功能有哪些

    商业智能产品主要功能有以下几点:1、数据仓库;2、数据ETL;3、数据统计输出(报表);4、分析功能。商业智能是一套完整的解决方案,用来将企业中现有的数据进行有效的整合,快速准确地提供报表并提出决策依据,帮助企业做出明智的业务经营决策。 1、数据仓库 高效的数据存储和访问方式。提供结构化和非结构化的…

    2022年10月25日
    28300
  • 如何提高研发质量和效率

    提高研发质量和效率的方法有:一、理清研发部门的定位;二、提升研发部门的相关能力建设;三、构建高效的流程及组织协同机制;四、激活研发组织的活力。企业首先应该引入IPD的体系,把研发部门变成对产品在市场成功与否结果负责的产品线组织的一部分。 一、理清研发部门的定位 企业首先应该引入IPD的体系,把研发部…

    2023年3月30日
    10100
  • 什么是项目章程

    项目章程是证明项目存在的正式书面说明和证明文件。由高级管理层签署,规定项目范围,如质量、时间、成本和可交付成果的约束条件,授权项目经理分派组织资源用于项目工作。通常是项目开始后第一份正式文件。主要包括项目满足的商业需求和产品描述。 项目章程是证明项目存在的正式书面说明和证明文件。由高级管理层签署,规…

    2023年1月17日
    14200
  • c语言换行符号是什么

    c语言换行符号是\n,作用是另起一行,将当前位置移到下一行的开头,这是一个转义字符,因为换行符不是一个可打印的字符,所以通过转义字符来表示。同时\n在C语言、C++、java、C#、Lua等众多编程语言中都表示一个换行符。 一、c语言中的换行符号 c语言换行符号是\n,作用是另起一行,将当前位置移到…

    2023年3月18日
    15700
  • 系统流程图是什么

    系统流程图是概括的描绘系统物理模型的传统工具。它的基本思想是用图形符号以黑盒子形式描绘系统里面的每个具体部件(程序、文件、数据库、表格、人工过程等),表达数据在系统各个部件之间流动的情况。 一、系统流程图是什么 系统流程图是概括的描绘系统物理模型的传统工具。它的基本思想是用图形符号以黑盒子形式描绘系…

    2023年4月30日
    1600
  • 如何对项目进行管理

    对项目进行管理的方法:一、普及项目管理相关知识,使其深入员工人心;二、加强沟通管理;三、严厉考核项目经理资质;四、加强监督,重激励,轻惩罚;五、改革项目管理相关机构,成立项目管理办公室。项目管理是一种全新思想与文化的引进。 一、普及项目管理相关知识,使其深入员工人心 项目管理是一种全新思想与文化的引…

    2023年3月21日
    1300
  • 编译语言和脚本语言的不同

    不同在于:1、定义不同;2、编译过程不同;3、运行速度不同;4、可移植性不同;5、应用场景不同。编译语言是一种将源代码转换为机器代码的计算机语言。而脚本语言则是一种解释型语言,不需要编译器,解释器可以直接执行脚本代码。 1、定义不同 编译语言是一种将源代码转换为机器代码的计算机语言。它需要通过编译器…

    2023年2月28日
    20900
  • 零缺陷管理的基本理念是什么

    零缺陷管理的基本理念是:基于宗旨和目标,通过对经营各环节各层面的全过程全方位管理,保证各环节各层面各要素的缺陷趋向于” 零”。零缺陷是指在生产活动的整个生命周期中始终保持每一个工序、每一位员工都按照零缺陷标准进行操作,而不存在任何生产过程中出现的任何缺陷。 零缺陷管理的基本理…

    2022年11月14日
    22900
  • 为何java一般情况不易热部署

    热部署是在不重启java虚拟机的前提下,自动更新class的行为,从而更新整个运行时的逻辑。在java开发领域,热部署一直是一个难以解决的问题,java虚拟机理论上只能实现方法体的修改热部署,对于整个类结构的更改,仍然需要重启虚拟机,对类重新加载才能完成更新操作。 其实java代码可以运行一些脚本的…

    2023年2月8日
    5700
  • 企业财务管理的目标是什么

    企业财务管理的目标有:1、利润最大化;2、股东财富最大化;3、企业价值最大化;4、相关者利益最大化。其中,利润最大化目标指假定在投资预期收益确定的情况下,财务管理行为将朝着有利于企业利润最大化的方向发展。 1、利润最大化 利润最大化目标,就是假定在投资预期收益确定的情况下,财务管理行为将朝着有利于企…

    2023年1月1日
    64300

发表回复

登录后才能评论
联系我们
站长微信
站长微信
分享本页
返回顶部