博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《深入理解LLVM》第一章 LLVM简介
阅读量:6611 次
发布时间:2019-06-24

本文共 1349 字,大约阅读时间需要 4 分钟。

第一章 LLVM简介

作者:史宁宁

1.1 LLVM是什么

LLVM是什么?这是一个虽然基础,但是也曾经让很多新入门的人迷惑的一个问题。从字面上来讲,LLVM(Low Level Virtual Machine)是一个底层虚拟机,LLVM曾经有一部分功能对虚拟机有所帮助。但是现在,LLVM所代表的基本和虚拟机没有关系了,也不在作为一个缩写使用了,而是直接作为一个名字使用。那么LLVM到底是什么?

LLVM可以被看作是一系列的编译器和工具链技术的集合,而且它们是模块化并且是可重用的。这是LLVM官方的解释。原话是:The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.【1】官方定义永远是准确的精炼的,那么作为刚刚接触LLVM的初学者,对LLVM的理解是什么呢?

  • LLVM是一个编译器;
  • LLVM是一个编译器框架;
  • LLVM是一系列的编译器工具;
  • LLVM是一个编译器工具链;
  • LLVM是一个C++实现的开源软件;

这几种对LLVM的理解都对,但是也都是LLVM的一个方面,综合起来就是一个完整的LLVM。所以,从狭义上来说,可以简单的把LLVM理解为一个编译器,但是也必须知道,这个编译器可不仅仅是个编译器,它包含了编译相关的各种工具链,并且有一些相对独立的工具,而且它还是开源的。关键一点不要再搞混了,LLVM是搞编译的,跟虚拟机已经完全没关系了。

每个人对同一个事务的理解都不会完全相同,即使是在技术领域也一样。所以,只要保证对事务理解不出现片面化错误化,使用自己的理解去思考一个事务,要比牢记住官方的定义要好的多,虽然后者往往更加的精确和简约。这是贯彻本书所建议的一个思考方式,只有这样,才能将知识和技术转化为自己的。

1.2 LLVM的发展

LLVM起源于2000年伊利诺伊大学厄巴纳-香槟分校维克拉姆•艾夫(Vikram Adve)与克里斯•拉特纳(Chris Lattner)的研究发展而成,他们想要为所有静态及动态语言创造出动态的编译技术【2】。

LLVM从创立至今,已经走过了十几个年头。在这十几个年头里,它的发展是有目共睹的,它的成绩也是令人值得骄傲的。
2005年,苹果公司雇用了克里斯•拉特纳(Chris Lattner)及他的团队,为了苹果电脑开发应用程序系统,LLVM为现今Mac OS X及iOS开发工具的一部分【2】。同时,LLVM现在也是Google的Android系统中的一部分,特别是在Android系统选着使用了新的运行时ART(Android Runtime)之后,LLVM在Android系统中的比重就得到了更大的提升。
作为开源领域第二大的编译器,甚至在某些方面专门为了替代GCC而实现的LLVM来说,近些年它已经在不断的接近甚至准备超越GCC了。但从性能来说,根据2011年的测试,运行时期的性能,平均GCC比LLVM高出10%的性能;2013年的测试结果,LLVM可以编译出接近与GCC接近相同性能的运行码【2】。

———未完待续————–

声明:本博客内容均为原创,如若转发,请一定标明出处。禁止用于商业目的。

转载地址:http://eesso.baihongyu.com/

你可能感兴趣的文章
C#线程安全的那些事
查看>>
【论文笔记】Social Role-Aware Emotion Contagion in Image Social Networks
查看>>
rpm安装PostgreSQL
查看>>
k sum(lintcode)
查看>>
28. extjs中Ext.BLANK_IMAGE_URL的作用
查看>>
Android 控件属性
查看>>
【244】◀▶IEW-Unit09
查看>>
处理有外键约束的数据
查看>>
par函数的xaxt函数-控制x轴刻度的显示
查看>>
Unity5.1 新的网络引擎UNET(十五) Networking 引用--中
查看>>
用任务计划管理计划任务对付任务计划-禁止WPS提示升级
查看>>
Android——SlidingMenu学习总结
查看>>
React-Native 之 GD (十六)首页筛选功能
查看>>
UI概念体系要素
查看>>
SSISDB5:使用TSQL脚本执行Package
查看>>
performSelectorInBackground V.S detachNewThreadSelector?
查看>>
linux,Centos,bash: service: command not found
查看>>
【转】UIColor对颜色的自定义
查看>>
php编译报错 configure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-...
查看>>
asp.net后台进程做定时任务
查看>>