- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在对编译器及其工作原理进行了一些研究之后,我了解到该过程通常分为 4 个步骤:预处理器、编译器、汇编器和链接器。我设想这些步骤的方式是每个步骤都是它自己的独立程序;预处理器程序、编译程序、汇编程序和链接程序。但是,您了解到有时创建汇编代码和生成目标文件的过程全部由编译器程序处理,有时则不然。它似乎在很大程度上取决于所使用的上下文和编程语言。那么我的问题是,将 C++ 源代码翻译成机器代码的典型翻译过程是如何分解的?
旁注:我的问题与其他 C++ 编译器线程不同,因为我不仅要问编译器如何工作,还要问某些其他进程(例如链接)是否有自己的可执行程序,或者它们是否通常内置在编译器中程序。
最佳答案
所有现代编译器(至少是 gcc 和 clang,但我怀疑其他编译器有很大不同)都将预处理和编译器作为一个可执行文件。这主要是因为编译器希望能够生成良好的错误消息[指向正确的行和列,并且当它涉及宏时,可以说“从宏 FOO(x) 调用”],并理解“我们是什么文件当编译器具有要查看的实际源代码而不是预处理代码时,'re in' 会更容易。
链接器通常是一个单独的程序,而汇编器仅用于内联汇编代码[通常作为编译器的集成部分]——否则,编译器将直接生成机器码而不使用汇编器[至少在 LLVM 中是这样] ,这是我最了解的编译器]。因此,编译器会生成一个完整的目标文件。
如果您有正确的选项,将调用链接器,但它是一个单独的可执行文件,它将目标文件与运行时库链接在一起,并在“main 之前”启动代码(全局对象构造,以及类似的,如以及“准备调用 main”)。这将生成可执行文件。
如果使用其他选项,编译器将只生成一个目标文件,或者以符号形式生成的机器代码的反汇编(-S
选项)。
负责代码生成的编译器后端部分通常还处理优化和各种代码转换以帮助优化阶段——例如 Clang + LLVM 将产生“统一”循环,无论是否您使用了 while
、for
或 goto
进行循环。
这有助于更高级的阶段不必识别许多不同形式的循环,并允许编译器生成“好的”代码,而不管程序员如何形成循环。 [当然,如果你让它足够复杂,编译器可能不会完全弄清楚你的循环是如何工作的,也不会优化得很好,但是对于基本形式之间的直接转换,它会做同样的最终代码生成,不管来源的样子]。
关于c++ - 典型的 C++ 编译器处理哪些工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34108131/
有什么方法可以使用常用工具(ffmpeg?mplayer/mencoder?mkvmerge?等)来查找关键帧在给定视频文件中出现的频率? {从而找到最小搜索大小?}这似乎是一个显而易见的统计数据,“
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 2 年前。 Improve
我正在阅读Intel的SSD产品specification。那里有一张桌子说 Latency (typical) read/write < 10 us 但是没有更多细节可以解释这个数字。有人知道“典型
出于好奇:典型的 Linux 发行版中最古老的代码/包是什么?电子书?海湾合作委员会? 最佳答案 Sun RPC 很老了,它在 C 库中: http://blogs.oracle.com/webmin
一个常见的假设是 1/x * x == 1。在符合 IEEE 754 标准的常见硬件上打破这个的最小正整数是多少? 当乘法逆的假设失败时,写得不好的有理算术就会停止工作。由于包括 C 和 C++ 在内
流行手机型号支持的典型触摸点数量是多少?我在基础研究中看到低至 2 和高至 5,但我希望能够将其映射到实际手机和更好的限制! 最佳答案 两部手机的触控点数据: Galaxy S 5 LG
我讨厌讨厌IE!既然我已经咆哮了,我确实需要一些帮助。我这里有这个网站。 http://pearsonlyle.uwpistol.net/galleries/susie-theodorou/edito
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
作为来自企业 IT 的 Node.js 初学者,我无法理解 Node.js 用法的某一方面。我将我的问题分为两部分。 问题 1) 严格从可扩展性的角度来看,I/O 密集型 Web 应用程序如何使用 N
我希望我的问题是合法的......我问这个问题是因为在阅读了许多博客,玩了许多示例应用程序和官方 API 1 周后,我仍然很困惑,从哪里开始编码...... 总的来说,就浏览器之间的系统架构而言 W
这是我的汽车类(class): public class Car { private int FGNr; private String name; private String type; priva
我认为我的问题标题清楚地表达了我需要的信息的本质。我用谷歌搜索了 where is the "applies to list" in vba excel以及其中的一些变体,都带有如图所示的引号,这应该
我是一名优秀的程序员,十分优秀!