当前位置: 首页 > news >正文

LLVM + Clang 基础介绍

前置

首先我们需要了解一些编译器相关的前置基础知识 才比较好理解本文的内容
我前两天写的:编译器基础知识传送门

正式开始

什么是LLVM?

广义上 说 LLVM 是编译器工具链的合集 比如包含clang前端+llvm后端和其它的一些模块
狭义上 说的就是LLVM的后端
如果前端,后端 这些概念都看不懂,建议回到上面看一下基础知识

llvm的起源就不多说了,总结就是两位牛逼的大学生发起的,后面入职了apple又继续发扬光大的.

LLVM架构

说到这里我们最好先了解下其它(传统)编译器的结构,比如GCC
GCC基础知识传送门

GCC 架构

在这里插入图片描述
gcc 这种就是前后端没有分开,耦合度很高
要新增一种语言的支持,或者新的硬件设备会很困难

LLVM 架构

在这里插入图片描述
前后端分离了
由一个中间语言IR进行连接
新增一门语言的支持,只需要实现个新的前端
新增新的硬件设备的支持,只需要实现新的后端

Clang又是啥

看完上面的llvm 的架构图 应该也比较清楚了
它是llvm集合下面的一个c/c++/objc编译器的前端
它的作用不说了,前面传送门也讲了

设计的目的就代替gcc
它的优点很多,它和gcc的官方对比也很多
相比较于GCC,Clang具有如下优点:

1.编译速度快。在某些平台上,Clang的编译速度明显快过GCC。Debug模式下,Clang编译OC的速度比GCC快3倍。   

2.占用内存少。Clang生成的AST(抽象语法树)所占用的内存是GCC的五分之一左右 。

3.模块化设计。Clang作为LLVM项目下的一个子项目,采用基于库的模块化设计,易于IDE的集成及其他用途的重用。   

4.诊断信息可读性强:在编译过程中,Clang 创建并保留了大量详细的元数据 (metadata),有利于调试和错误报告   。

5.设计清晰简单,容易理解,易于扩展增强。

end

大家可以可以把我写的这几篇编译器相关的基础知识看一下
脑子里基本上就可以串起来了
我后续在写一些 cmake cmakefile cmakelist gn ninja 那些都是啥

相关文章:

  • 即时模拟仿真的低代码UI设计工具【Witools-Lvgl】设计一套LVGL UI界面
  • 5分钟用 docker 创建nodered
  • 基于微信小程序和安卓的婚恋相亲app
  • Node安装及配置
  • 时间序列的数据分析(六):指数平滑预测法
  • npm中的.package-lock.json包管理配置文件 package.json自己创建的包配置文件(npm init -y)
  • 机器人导航仿真
  • Nacos下载和安装-windows
  • 2022-09-01 C++并发编程(十七)
  • 一次性安装所有的包、卸载包
  • 航拍倾斜摄影 Web 3D GIS 数字孪生智慧火电厂
  • 迅为RK3568开发板Linux_NVR_SDK系统开发-查看NPU/GPU/CPU频率使用率
  • CentOS 安装 rabbitMQ
  • springboot毕设项目疫情下药店管理系统xcu0u(java+VUE+Mybatis+Maven+Mysql)
  • 云原生游戏第 2 讲:OpenKruiseGame 设计理念详解
  • 【391天】每日项目总结系列128(2018.03.03)
  • 2017-09-12 前端日报
  • Akka系列(七):Actor持久化之Akka persistence
  • Android 控件背景颜色处理
  • CentOS 7 防火墙操作
  • Golang-长连接-状态推送
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • pdf文件如何在线转换为jpg图片
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Spring Boot快速入门(一):Hello Spring Boot
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • windows下使用nginx调试简介
  • 前端临床手札——文件上传
  • 物联网链路协议
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • ionic异常记录
  • ​TypeScript都不会用,也敢说会前端?
  • ​ubuntu下安装kvm虚拟机
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • (175)FPGA门控时钟技术
  • (3)nginx 配置(nginx.conf)
  • (NSDate) 时间 (time )比较
  • (Ruby)Ubuntu12.04安装Rails环境
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (十八)三元表达式和列表解析
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (正则)提取页面里的img标签
  • (转载)Linux 多线程条件变量同步
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET框架
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .net中应用SQL缓存(实例使用)
  • .so文件(linux系统)
  • /etc/fstab 只读无法修改的解决办法
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题