我试图理解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中用于大致相同的概念。 –