《深入理解LLVM》第一章 LLVM简介

简介: 第一章 LLVM简介作者:史宁宁1.1 LLVM是什么LLVM是什么?这是一个虽然基础,但是也曾经让很多新入门的人迷惑的一个问题。从字面上来讲,LLVM(Low Level Virtual Machine)是一个底层虚拟机,LLVM曾经有一部分功能对虚拟机有所帮助。

第一章 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】。

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

目录
相关文章
|
编译器 vr&ar C++
CMake构建Makefile深度解析:从底层原理到复杂项目(二)
CMake构建Makefile深度解析:从底层原理到复杂项目
495 0
|
算法 编译器 数据库
【C++ 泛型编程 高级篇】使用SFINAE和if constexpr灵活处理类型进行条件编译
【C++ 泛型编程 高级篇】使用SFINAE和if constexpr灵活处理类型进行条件编译
977 0
|
11月前
|
前端开发 编译器 C++
什么是LLVM项目?
什么是LLVM项目?
427 37
|
Python
Python 判断字符串是否包含子字符串
Python 判断字符串是否包含子字符串
1112 0
|
12月前
|
算法 架构师 Java
深入理解HotSpot源码:CMS、C1与ZGC的区别
【10月更文挑战第8天】作为一名资深架构师,深入理解HotSpot虚拟机中的垃圾收集器CMS、编译器C1以及新一代垃圾收集器ZGC,对于构建高效、可靠的Java应用至关重要。本文将通过背景介绍、业务场景分析、功能点阐述及Java源码示例,带您深入探讨这三者的区别。
189 2
|
12月前
|
安全 编译器 程序员
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
227 2
|
10月前
|
存储 人工智能 前端开发
【AI系统】LLVM IR 基本概念
本文深入探讨了LLVM的IR(中间表示)概念,解释了其在编译器工作原理中的重要性及应用方式。LLVM IR作为一种适中抽象级别的表示形式,能有效捕捉源代码信息,支持编译器的灵活操作与优化。文章进一步分析了LLVM IR的不同表现形式,包括内存中的编译中间语言、硬盘上的二进制格式和人类可读的文本格式,以及通过具体示例展示了如何使用Clang将C语言程序编译为LLVM IR。此外,还详细解析了LLVM IR的基本语法、条件语句、循环结构和指针操作等内容。
251 3
|
11月前
|
安全 网络安全 数据安全/隐私保护
如何识别和防范网络诈骗?
识别和防范网络诈骗需要我们时刻保持警惕,仔细核实信息,保护好个人信息和财产安全,遇到可疑情况及时与相关机构或警方联系,共同打击网络诈骗行为。
685 13
|
安全 编译器 Go
Go 1.21: 泛型函数的全面回顾
Go 1.21: 泛型函数的全面回顾
|
存储 Rust API
30天拿下Rust之HashMap
30天拿下Rust之HashMap
168 0