2024年最新(Outlook) 详解三大编译器:gcc、llvm 和 clang_gcc,2024年最新2024年BATJ30套大厂C C++经典高频面试题

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

GCC

GCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。GCC 原名为 GNU C 语言编译器,因为它原本只能处理 C语言。GCC 快速演进,变得可处理 C++、Fortran、Pascal、Objective-C、Java, 以及 Ada 等他语言。

详解三大编译器:gcc、llvm 和 clang

LLVM

LLVM (Low Level Virtual Machine,底层虚拟机) 提供了与编译器相关的支持,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。简而言之,可以作为多种编译器的后台来使用。

苹果公司一直使用 GCC 作为官方的编译器。GCC 作为一款开源的编译器,一直做得不错,但 Apple 对编译工具会提出更高的要求。原因主要有以下两点:

其一,是 Apple 对 Objective-C 语言(包括后来对C语言)新增很多特性,但 GCC 开发者并不买Apple的账——不给实现,因此索性后来两者分成两条分支分别开发,这也造成 Apple 的编译器版本远落后于 GCC 的官方版本。其二,GCC 的代码耦合度太高,很难独立,而且越是后期的版本,代码质量越差,但 Apple 想做的很多功能(比如更好的 IDE 支持),需要模块化的方式来调用 GCC,但 GCC一直不给做。

编译器大神 Chris Lattner 横空出世

2000年,本科毕业的 Chris Lattner 像中国多数大学生一样,按部就班地考了GRE,最终前往UIUC(伊利诺伊大学厄巴纳香槟分校),开始了艰苦读计算机硕士和博士的生涯。在这阶段,他不仅周游美国各大景点,更是翻烂了《Compilers: Principles, Techniques, and Tools》,成了GPA满分(4.0) 牛人,并不断地研究探索关于编译器的未知领域,发表了一篇又一篇的论文,。他在硕士毕业论文里提出了一套完整的在编译时、链接时、运行时甚至是在闲置时优化程序的编译思想,直接奠定了LLVM 的基础。LLVM 在他念博士时更加成熟,使用GCC 作为前端来对用户程序进行语义分析产生IF(Intermidiate Format),然后 LLVM 使用分析结果完成代码优化和生成。这项研究让他在2005年毕业时就成为了业界小有名气的编译器专家,他也因此早早地被Apple 盯上,最终成为其编译器项目的骨干。

刚进入 Apple,Chris Lattner 就大展身手:首先在 OpenGL 小组做代码优化,把 LLVM运行时的编译架在 OpenGL 栈上,这样OpenGL 栈能够产出更高效率的图形代码。如果显卡足够高级,这些代码会直接扔入GPU 执行。但对于一些不支持全部OpenGL特性的显卡(比如当时的Intel GMA卡),LLVM 则能够把这些指令优化成高效的 CPU指令,使程序依然能够正常运行。这个强大的 OpenGL 实现被用在了后来发布的Mac OS X 10.5上。同时,LLVM的链接优化被直接加入到 Apple 的代码链接器上,而 LLVM-GCC也被同步到使用 GCC4.0 代码。

详解三大编译器:gcc、llvm 和 clang

LLVM2.0 - Clang

Apple 吸收Chris Lattner的目的要比改进GCC代码更具野心 – Apple 打算从零开始写 C、C++、Objective-C语言的前端 Clang,完全替代掉GCC。

Clang 是LLVM的前端,可以用来编译C,C++,ObjectiveC等语言。Clang则是以LLVM为后端的一款高效易用,并且与IDE 结合很好的编译前端。

Clang 只支持C,C++和Objective-C三种语言。2007年开始开发,C编译器最早完成,而由于Objective-C 只是C语言的一个简单扩展,相对简单,很多情况下甚至可以等价地改写为C语言对Objective-C运行库的函数调用,因此在2009年时,已经完全可以用于生产环境。C++ 在后来也得到了支持。

详解三大编译器:gcc、llvm 和 clang

GCC 和 Clang 对比

  • Clang特性

速度快:通过编译 OS X 上几乎包含了所有 C 头文件的 carbon.h 的测试,包括预处理 (Preprocess),语法 (lex),解析 (parse),语义分析 (Semantic Analysis),抽象语法树生成 (Abstract Syntax Tree) 的时间,Clang 比 GCC 快2倍多。

内存占用小:Clang 内存占用是源码的 130%,Apple GCC 则超过 10 倍。

诊断信息可读性强:其中错误的语法不但有源码提示,还会在错误的调用和相关上下文的下方有~~~~~和^的提示,相比之下 GCC 的提示很天书。

兼容性好:Clang 从一开始就被设计为一个API,允许它被源代码分析工具和 IDE 集成。GCC 被构建成一个单一的静态编译器,这使得它非常难以被作为 API 并集成到其他工具中。

Clang有静态分析,GCC没有。

Clang使用BSD许可证,GCC使用GPL许可证。

详解三大编译器:gcc、llvm 和 clang

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

如果你需要这些资料,可以戳这里获取

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值