专栏首页FishClang与LLVM的关系

Clang与LLVM的关系

LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。LLVM计划启动于2000年,最初由University of Illinois at Urbana-Champaign的Chris Lattner主持开展。2006年Chris Lattner加盟Apple Inc.并致力于LLVM在Apple开发体系中的应用。Apple也是LLVM计划的主要资助者[引自百度百科]。

我们可以认为LLVM是一个完整的编译器架构,也可以认为它是一个用于开发编译器、解释器相关的库。在理解LLVM时,我们可以认为它包括了一个狭义的LLVM和一个广义的LLVM。

广义的LLVM其实就是指整个LLVM编译器架构,包括了前端、后端、优化器、众多的库函数以及很多的模块;而狭义的LLVM其实就是聚焦于编译器后端功能(代码生成、代码优化、JIT等)的一系列模块和库。

接下来,简要的介绍一下Clang。

Clang是一个C++编写、基于LLVM、发布于LLVM BSD许可证下的C/C++/Objective-C/Objective-C++编译器。那么为什么已经有了GCC还要开发Clang呢?Clang相比于GCC有什么优势呢?

其实,这也是Clang当初在设计开发的时候所主要考虑的原因。Clang是一个高度模块化开发的轻量级编译器,它的编译速度快、占用内存小、非常方便进行二次开发。

最后,我们大概讲一讲LLVM和Clang的关系。我们将它们对应于传统的编译器当中的几个独立的部分,这样能够更加方便明确生动的表述。

其实,对应到这个图中,我们就可以非常明确的找出它们的对应关系。Clang其实大致上可以对应到编译器的前端,主要处理一些和具体机器无关的针对语言的分析操作;编译器的优化器部分和后端部分其实就是我们之前谈到的LLVM后端(狭义的LLVM);而整体的Compiler架构就是LLVM架构

原文地址:https://blog.csdn.net/baidu_24256693/article/details/79905396

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 手把手教你设计CPU(蜂鸟书)读书笔记

    这本书讲的是如何用verilog,以riscv为指令集,设计一款CPU。也就是书中说的蜂鸟E200。之前没有看过类似的书,对CPU的工作流程也不熟悉。这本书以v...

    用户1148523
  • 《深入理解Spark-核心思想与源码分析》读书笔记(1)

    前两章 第一章主要是讲如何安装和配置spark,以及如何导入spark源码调试运行;第二章主要讲的是上次那本书《Spark快速大数据分析》的内容,科普一下spa...

    用户1148523
  • CUDA C最佳实践-CUDA Best Practices(三)

    10. 运行配置优化 10.1. 占用 10.1.1. 计算占用 10.2. 同步Kernel执行 10.3. 多上下文 10.4. 隐藏寄存器依赖 10.5....

    用户1148523
  • Python爬虫实战详解:爬取图片之家

    本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

    松鼠爱吃饼干
  • 技术大牛都是怎么突破运维瓶颈、提升数据价值的?

    ? 2019年度Gdevops全球敏捷运维峰会 经过潜心打磨,结合行业热点 将于5月10日以北京为起点强势启动 展开新一年精彩纷呈的技术巡演! 运维专场精华...

    腾讯大讲堂
  • 利用bind实现智能DNS

    智能DNS是域名频道在业界首创的智能解析服务。能自动判断访问者的IP地址并解析出对应的IP地址,使网通用户会访问到网通服务器,电信用户会访问到电信服务器。智能D...

    DevinGeng
  • jxls导入excel

    我们在开发中经常用jxls实现导出功能,殊不知jxls也有导入功能,下面来介绍下如何使用jxls导入excel。

    一笠风雨任生平
  • 【机器学习】--xgboost从初识到应用

    在 Kaggle 的很多比赛中,我们可以看到很多 winner 喜欢用 xgboost,而且获得非常好的表现,今天就来看看 xgboost 到底是什么以及如何应...

    LhWorld哥陪你聊算法
  • JavaScript开发注意事项

    DOM加载之前执行: > (function() { > alert(“DOM还没加载哦!”); > ...

    城市中的游牧民族
  • 数字内容产业如何掌握全球文化产业主导权?

    王   洋  腾讯研究院特约研究员 田小军  腾讯研究院版权研究中心副秘书长   中国互联网产业在移动网络时代实现了弯道超车,建立了“免费基础服务+收费增值服...

    腾讯研究院

扫码关注云+社区

领取腾讯云代金券