我試圖理解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. 跨C++翻譯單元初始化
- 2. C和C++中的翻譯單元
- 3. 部首後衛/翻譯單元問題
- 4. libclang緩慢地重新編譯翻譯單元
- 5. 由當前翻譯單元編譯的對象的名稱C
- 6. 翻譯一個四元數
- 7. LLVM編譯單元的正確抽象是什麼?
- 8. CSS3翻譯:翻譯橢圓路徑上的元素
- 9. 直接在單元格中獲取單詞的翻譯
- 10. Django表單錯誤翻譯
- 11. Symfony2表單錯誤翻譯
- 12. Java類翻譯菜單
- 13. Zend框架菜單翻譯
- 14. 非翻譯單引號
- 15. jQuery插件,允許像谷歌翻譯下拉菜單翻譯
- 16. 如何從java翻譯器中獲取翻譯的單詞?
- 17. Joomla翻譯文件不會翻譯所有單詞
- 18. Magento:翻譯文件中的單引號無效翻譯
- 19. 單聲道LLVM和LLVM-IR
- 20. extern關鍵字和多個翻譯單元的使用
- 21. VBA代碼單元的數據語言翻譯
- 22. 單元測試中的ng2-translate返回鍵而不是翻譯
- 23. 不同翻譯單元中的模板實例
- 24. 靜態,全局和多個翻譯單元
- 25. 字符串跨翻譯單元的文字地址
- 26. 獲取的代碼行的總數在翻譯單元
- 27. 如何註釋翻譯單元包含電子郵件文本?
- 28. 使用Boost.Spirit定義獨立翻譯單元中的船長X3
- 29. 角度翻譯單元測試 - 無法注入$ translateProvider
- 30. 如何翻譯Python 3中的MATLAB單元格?
來給你的答案多一點細節:「翻譯單位」是從* C *語言標準,在其他編譯語言也使用的一個術語。術語「模塊」在LLVM中用於大致相同的概念。 –