编译器构造 – 编译器如何管理其内存占用?

编译器能够编译大量的源代码.在编译阶段,这个巨大的代码在AST中被翻译.

我想如果代码很大,这个AST也会变得很大.

我们可以假设编译器永远不会因为构建AST并将其保留在内存中而在现代计算机上耗尽内存吗?

最佳答案 使用虚拟内存,编译器/链接器工具实际上不必担心内存占用.

该工具请求它所需的内容,并且操作系统在进程地址空间中提供足够的虚拟内存,或者[特定机器的策略决策]操作系统拒绝该工具在某个时刻增加空间的请求,并且该进程出错并且通常退出.

当然,您可能拥有一个具有巨大VM限制且没有足够物理内存来支持它的系统.然后该工具将翻页,直至成功或运算符厌恶地停止它.

[我们有自己的编译器,我们经常用它来编译几百万行单片程序.该编译器通常需要几百兆的VM来处理该程序.这是大多数现代PC轻松提供的.]

点赞