我正在为一种语言设计一个多传递编译器,AST完全保存在内存中。 这意味着我将整个AST保存在内存中,无论程序包含多少文件。
我正在考虑由15k +文件组成的潜在BIG程序(谷歌Chrome是第一个出现在我脑海中的例子,它在C ++和C / C ++编译器中有单独的编译,所以这对于这些语言来说不是问题)。
是否一个能够保持谷歌Chrome整个AST内存不足的编译器?
答案 0 :(得分:0)
当然可能会耗尽内存。但是,仔细完成后,AST不需要比源代码本身更多的内存,因为常见的符号(所有类型,方法,结构等)可以重复删除和指针引用。
问题往往是使用低效(大型通用)数据结构,而自定义数据结构(例如,作为自己的链接列表的AST节点)将能够将内存利用率降低1-2个大小