首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >LLVM和java字节码有什么不同?

LLVM和java字节码有什么不同?
EN

Stack Overflow用户
提问于 2009-01-18 05:49:48
回答 2查看 23.3K关注 0票数 77

我不明白LLVM和java (字节码)之间的区别,它们是什么?

-编辑-我指的是LLVM和java (字节码)之间的区别,而不是LLVM和java之间的区别。

EN

回答 2

Stack Overflow用户

发布于 2009-11-23 04:41:27

太糟糕了,这个问题一开始就错了。我来到这里是为了寻找更详细的比较。

JVM字节码和LLVM位码之间最大的区别是JVM指令是面向堆栈的,而LLVM位码不是。这意味着JVM字节码不是将值加载到寄存器中,而是将值加载到堆栈中并从堆栈计算值。我相信这样做的一个好处是编译器不需要分配寄存器,但我不确定。

LLVM bitcode更接近机器级代码,但不受特定体系结构的约束。例如,我认为LLVM bitcode可以使用任意数量的逻辑寄存器。也许更熟悉LLVM的人可以在这里发言?

票数 28
EN

Stack Overflow用户

发布于 2020-06-06 05:05:04

JVM字节码和LLVM字节码既有相似之处,也有不同之处。就相似性而言,这是两个中间程序表示。因此,它们可以表示用不同编程语言编写的程序。例如,有将Java、Closure、Scala等转换为Java虚拟机字节码的前端,也有将C、C++、Swift、Julia、Rust等转换为LLVM字节码的前端。

也就是说,JVM字节码和LLVM字节码在用途和设计上有很大的不同。历史上,JVM字节码被设计成通过网络(例如,因特网)分发,并经由虚拟机在本地计算机中解释。这就是为什么它是基于堆栈的原因之一:通常,基于堆栈的字节码更小。

也许,LLVM字节码在一开始也被认为是解释的,但如果它发生了,它的目的就会随着时间的推移而改变。因此,LLVM字节码是一种需要分析和优化的程序表示。它是以静态单赋值格式编码的,这种格式更像是程序的数学抽象,而不是实际的可执行程序集。因此,例如,在LLVM IR中有像φ-functions这样的指令,在典型的计算机体系结构中没有直接等效的指令。因此,尽管可以解释LLVM字节码( LLVM工具链中有一个名为lli的工具可以做到这一点),但这并不是使用LLVM IR的最重要方式。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/454720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档