【发布时间】:2016-08-03 15:14:14
【问题描述】:
假设我们有(在 C++ 中):MyClass* x = new MyClass(10)
谁能解释一下当编译器解析这个语句时“究竟”发生了什么? (我试着看了一下红龙书,但找不到有用的东西。
我想知道堆栈/堆或编译器的符号表中发生了什么。编译器如何跟踪x 变量的类型?稍后对 x->method1(1,2) 的调用将如何解析为 MyClass 中的适当方法(为简单起见,假设没有继承,MyClass 是我们拥有的唯一类)。
【问题讨论】:
-
请注意,Dragon Book 虽然深入研究了编译器,但并未考虑像现代 C++ 这样复杂的语言。特别是,由于模板编译 C++ 代码是图灵完备的。
-
然而,Dragon Book 对编译器阶段确实有很好的解释。您对“堆栈/堆或编译器符号表中发生的情况”的怀疑表明您不了解这些阶段。堆栈/堆在代码生成过程中被认为是相当晚的,而符号表几乎存在于第一阶段(C++ 有一个带有自己的符号表的预处理器,但这与显示的声明无关)
标签: c++ compiler-construction runtime interpreter jit