我試圖理解LLVM程序的高層結構。 我在書中讀到「程序是由模塊組成的,每個模塊都對應於translation unit」。有人可以更詳細地解釋我以上內容以及模塊和翻譯單元(如果有)之間的不同之處。 我也有興趣知道當翻譯單元啓動並完成調試信息編碼時哪部分代碼被調用?LLVM翻譯單元
LLVM翻譯單元
回答
翻譯單位是語言標準術語。例如,這是從C(c99 iso草案)
5.1概念模型; 5.1.1翻譯環境; 5.1.1.1程序結構
一個C程序不需要全部同時翻譯。該程序的文本以本國際標準中稱爲源文件(或預處理文件)的單位保存爲 。一個 源文件以及所有通過預處理 指令#include包含的標題和源文件被稱爲預處理轉換單元。在預處理之後,預處理翻譯單元被稱爲翻譯單元。
於是,翻譯單元是預處理後的單源文件(file.c
)(所有#include
d *.h
文件實例化,所有宏被擴展,所有的意見會被跳過,文件準備符號化)。
翻譯單元是一個編譯單元,因爲它在連接步驟之前不依賴任何外部資源。所有標題都在TU內。
術語模塊未在語言標準中定義,但它在更深的翻譯階段指的是translation unit
。
LLVM把它描述爲:http://llvm.org/docs/ProgrammersManual.html
模塊類代表存在於LLVM方案的頂層結構。 LLVM模塊實際上是原始程序的翻譯單元或由鏈接程序合併的多個翻譯單元的組合。
Module類跟蹤函數列表,GlobalVariables列表和SymbolTable。此外,它還包含一些有用的成員函數,可以使常用操作變得簡單。
關於你的問題,這部分:
我也有興趣知道哪部分代碼被稱爲翻譯單元開始時並完成調試信息的編碼?
這取決於如何使用LLVM。 LLVM本身是一個庫,可以以各種方式使用。
對於clang/LLVM(C/C++編譯器構建在libclang和LLVM上)預處理階段後創建的翻譯單元。它將被解析成AST,然後解析成LLVM程序集並保存在Module中。
對於教程示例,這裏是一個創建模塊http://llvm.org/releases/2.6/docs/tutorial/JITTutorial1.html
- 1. CSS翻譯已經翻譯的元素
- 2. 跨C++翻譯單元初始化
- 3. 部首後衛/翻譯單元問題
- 4. C和C++中的翻譯單元
- 5. 翻譯XAML元素
- 6. Knp菜單翻譯
- 7. 角度翻譯 - 翻譯翻譯值attr
- 8. libclang緩慢地重新編譯翻譯單元
- 9. 由當前翻譯單元編譯的對象的名稱C
- 10. 翻譯一個四元數
- 11. 翻譯元素的位置
- 12. 旋轉元素的翻譯
- 13. 什麼是元環翻譯
- 14. LLVM編譯單元的正確抽象是什麼?
- 15. 有沒有PHP - > LLVM紅外線翻譯器?
- 16. 從MCInst翻譯成ELF二進制在LLVM
- 17. AngularJS翻譯使用角度翻譯的多元化
- 18. CSS3翻譯:翻譯橢圓路徑上的元素
- 19. 直接在單元格中獲取單詞的翻譯
- 20. 簡單翻譯與snap.svg
- 21. Django表單錯誤翻譯
- 22. 表單輸入的翻譯
- 23. Zend框架菜單翻譯
- 24. Zend Framework 2 - 表單翻譯
- 25. Java類翻譯菜單
- 26. 非翻譯單引號
- 27. WordPress WooCommerce單詞不翻譯
- 28. Symfony2表單錯誤翻譯
- 29. 如何從java翻譯器中獲取翻譯的單詞?
- 30. Google網站翻譯器翻譯Rails中的單個頁面
來給你的答案多一點細節:「翻譯單位」是從* C *語言標準,在其他編譯語言也使用的一個術語。術語「模塊」在LLVM中用於大致相同的概念。 –