编译器能够编译大量的源代码。在编译阶段,这个巨大的代码在AST中被翻译。 我想如果代码很大,这个AST也会变得很大。
我们可以假设编译器在现代计算机上永远不会耗尽内存,只需构建AST并将其保存在内存中即可吗?
答案 0 :(得分:1)
使用虚拟内存,编译器/链接器工具实际上不必担心内存占用。
该工具会请求它所需要的内容,并且操作系统或者在进程地址空间中提供足够的虚拟内存,或者[特定机器的策略决策]操作系统拒绝工具在某个时刻增加空间的请求,以及进程得到一个错误,通常会退出。
当然,您可能拥有一个具有巨大VM限制且没有足够物理内存来支持它的系统。然后该工具将翻页,直至成功或操作员厌恶地停止它。
[我们有自己的编译器,我们经常用它来编译几百万行的单片程序。该编译器通常需要几百兆的VM来处理该程序。这很容易被大多数现代PC提供。]
答案 1 :(得分:0)
编译器的内存需求通常随输入大小而增长。
编译器与内存要求取决于输入大小的任何其他程序没什么不同:你只是假设有足够的,否则优雅地死掉。
听起来太容易了?好吧,你不能反对数学。如果一个人真的需要那种记忆,那么要么就足够了,要么你运气不好。就这么简单。