【发布时间】:2016-09-25 21:30:41
【问题描述】:
编译器能够编译大量源代码。这个巨大的代码在编译阶段被翻译成 AST。 我想如果代码很大,这个 AST 也会变得很大。
我们可以假设编译器在现代计算机上通过构建 AST 并将其保存在内存中永远不会耗尽内存吗?
【问题讨论】:
-
大多数源文件都很小。
-
链接器不需要很多内存。编译器会这样做,但它们可以分成多个通道。
-
@melpomene 你会感到惊讶。我曾经有一个编译器(Watcom)打印编译的行数,.c 或 .cpp 文件通常为几百行,.h/.hpp 文件为数千行。
-
现代计算机具有千兆字节的 RAM。即使源代码的每个字节生成一个单独的 AST 节点,开销超过 1000 字节(完全不现实),您仍然可以将数兆字节源文件的 AST 放入 RAM 中。您最后一次看到 1 MB 大的源文件是什么时候?我见过的最大的是来自 LLVM 的
X86ISelLowering.cpp:大约 1.2 MB 或 32000 行代码,加上#includes 扩展到的任何内容,这是一个真正的极端示例。
标签: compiler-construction theory