日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深入浅出让你理解什么是LLVM

發布時間:2025/4/5 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入浅出让你理解什么是LLVM 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文

什么是LLVM

LLVM項目是模塊化、可重用的編譯器以及工具鏈技術的集合。

美國計算機協會 (ACM) 將其2012 年軟件系統獎項頒給了LLVM,之前曾經獲得此獎項的軟件和技術包括:Java、Apache、 Mosaic、the World Wide Web、Smalltalk、UNIX、Eclipse等等
創始人:Chris Lattner,亦是Swift之父
趣聞:Chris Latter本來只是想寫一個底層的虛擬機,這也是LLVM名字的由來,low level virtual machine,跟Java的JVM虛擬機一樣,可是后來,llvm從來沒有被用作過虛擬機,哪怕LLVM的名氣已經傳開了。所以人們決定仍然叫他LLVM,更多的時候只是當作“商標”一樣的感覺在使用,其實它跟虛擬機沒有半毛錢關系。官方描述如下
The name “LLVM” itself is not an acronym; it is the full name of the project. “LLVM”這個名稱本身不是首字母縮略詞; 它是項目的全名。

傳統的編譯器架構

  • Frontend:前端
  • 詞法分析、語法分析、語義分析、生成中間代碼
  • Optimizer:優化器
  • 中間代碼優化
  • Backend:后端
生成機器碼

  • 不同的前端后端使用統一的中間代碼LLVM Intermediate Representation (LLVM IR)
  • 如果需要支持一種新的編程語言,那么只需要實現一個新的前端
  • 如果需要支持一種新的硬件設備,那么只需要實現一個新的后端
  • 優化階段是一個通用的階段,它針對的是統一的LLVM IR,不論是支持新的編程語言,還是- 支持新的硬件設備,都不需要對優化階段做修改
  • 相比之下,GCC的前端和后端沒分得太開,前端后端耦合在了一起。所以GCC為了支持一門新的語言,或者為了支持一個新的目標平臺,就 變得特別困難
  • LLVM現在被作為實現各種靜態和運行時編譯語言的通用基礎結構(GCC家族、Java、.NET、Python、Ruby、Scheme、Haskell、D等)

什么是Clang

LLVM項目的一個子項目,基于LLVM架構的C/C++/Objective-C編譯器前端。
相比于GCC,Clang具有如下優點
  • 編譯速度快:在某些平臺上,Clang的編譯速度顯著的快過GCC(Debug模式下編譯OC速度比GGC快3倍)
  • 占用內存小:Clang生成的AST所占用的內存是GCC的五分之一左右
  • 模塊化設計:Clang采用基于庫的模塊化設計,易于 IDE 集成及其他用途的重用
  • 診斷信息可讀性強:在編譯過程中,Clang 創建并保留了大量詳細的元數據 (metadata),有利于調試和錯誤報告
  • 設計清晰簡單,容易理解,易于擴展增強

LLVM整體架構,前端用的是clang,廣義的LLVM是指整個LLVM架構,一般狹義的LLVM指的是LLVM后端(包含代碼優化和目標代碼生成)。

源代碼(c/c++)經過clang–> 中間代碼(經過一系列的優化,優化用的是Pass) --> 機器碼

總結

以上是生活随笔為你收集整理的深入浅出让你理解什么是LLVM的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。