《编译与反编译技术实战》——1.5节编译器LLVM

简介:

本节书摘来自华章社区《编译与反编译技术实战》一书中的第1章,第1.5节编译器LLVM,作者刘晓楠 陶红伟 岳 峰 戴超,更多章节内容可以访问云栖社区“华章社区”公众号查看

1.5 编译器LLVM
LLVM是构架编译器的框架系统,由C++编写而成,用于优化以任意程序语言编写的程序的编译时间、链接时间、运行时间以及空闲时间,对开发者保持开放,并兼容已有脚本。LLVM计划启动于2000年,最初由伊利诺伊大学香槟分校的Chris Lattner主持开展。2006年Chris Lattner加盟Apple公司并致力于LLVM在Apple开发体系中的应用。Apple公司也是LLVM计划的主要资助者。
LLVM的命名最早源自于Low Level Virtual Machine(底层虚拟机)的缩写,由于命名带来的混乱,目前LLVM就是该项目的全称。LLVM 核心库提供了与编译器相关的支持,可以作为多种语言编译器的后台来使用,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。LLVM的项目是一个模块化和可重复使用的编译器和工具技术的集合。LLVM提供一个现代化的、基于SSA的编译策略,能够同时支持静态和动态的任意编程语言的编译目标。至今为止,LLVM已被应用到许多商业和开源的项目,并被广泛用于学术研究。
LLVM荣获2012年ACM软件系统奖。
对关注编译技术的开发人员,LLVM提供了很多优点:
1)现代化的设计。LLVM的设计是高度模块化的,使得其代码更为清晰和便于排查问题所在。
2)语言无关的中间代码。一方面,这使得通过LLVM能够将不同的语言相互联结起来,也使得LLVM能够紧密地与IDE交互和集成。另一方面,发布中间代码而非目标代码能够在目标系统上更好地发挥其潜能而又不影响可调试性(比如,在目标系统上针对本机的硬件环境产生目标代码,但又能够直接通过中间代码来进行行级调试)。
3)可作为工具和函数库。使用LLVM提供的工具可以比较容易地实现新的编程语言的优化编译器或虚拟机,或为现有的编程语言引入一些更好的优化/调试特性。

相关文章
|
存储 消息中间件 监控
【Flume】Flume在大数据分析领域的应用
【4月更文挑战第4天】【Flume】Flume在大数据分析领域的应用
|
Linux Android开发
CentOS7下安装Emby流媒体服务器
CentOS7下安装Emby流媒体服务器
3179 0
CentOS7下安装Emby流媒体服务器
|
前端开发 NoSQL Java
Nacos 配置中心实际运用场景以及配置优先级简要概述
Nacos 配置中心实际运用场景以及配置优先级简要概述
822 0
|
Shell
xhost: unable to open display ":0.0"
-bash: xhost: 未找到命令 原因是因未没有安装相关的包(其他类似command not found命令没有可以用这种方式解决) yum whatprovides "*/xhost" 安装对应版本
1950 0
如何绘制PAD图和N-S图(详细步骤)
如何绘制PAD图和N-S图(详细步骤)
1409 0
|
9月前
|
Java
java构造方法时对象初始化,实例化,参数赋值
java构造方法时对象初始化,实例化,参数赋值
244 1
|
移动开发 前端开发 API
uin-app如何获取微信昵称和头像的博客
uin-app如何获取微信昵称和头像的博客
|
JavaScript
vue 配置【详解】 vue.config.js ( 含 webpack 配置 )
vue 配置【详解】 vue.config.js ( 含 webpack 配置 )
217 0
|
存储 安全 API
[笔记]深入解析Windows操作系统《四》管理机制(二)
[笔记]深入解析Windows操作系统《四》管理机制(二)
325 0
|
存储 关系型数据库 数据库
PostgreSQL孤儿文件
与所有其他关系数据库系统一样,PostgreSQL需要通过写入wal日志或在Checkpoint时同步数据到数据文件来持久化数据到磁盘上。对于数据文件,一旦Relation达到SEGMENT_SIZE(默认1GB),PostgreSQL就会创建一个新的数据文件。因此如果Relation持续增长,则该Relation可能会由多个文件组成。在这篇文章中想要考虑的问题是,是否可能存在孤儿文件。