0

我知道这是一个普遍的问题。

我要编写一个编译器,我想知道在读取文件时获取语言的标记是否更好(即,首先打开文件,然后在读取时提取标​​记,最后关闭文件)还是读取文件首先,关闭它,然后使用变量中的数据。伪代码类似于:

file = open(filename);
textVariable = read(file);
close(file);

getTokens(textVariable);

第一个选项类似于:

file = open(filename);
readWhileGeneratingTokens(file);
close(file);

我想第一个选项看起来更好,因为在主内存方面没有额外的成本。但是,我认为使用第二个选项可能会有一些好处,因为我可以最大限度地减少文件打开的时间。

4

2 回答 2

0

我无法提供任何硬数据,但与优化/生成目标代码所花费的时间相比,编译器通常花费在标记源代码上的时间相当少。因此,想要最小化源文件打开的时间似乎为时过早。此外,在标记化之前将整个源文件读入内存将阻止任何类型的逐行执行(想想解释语言)或从非文件位置读取输入(想想像标准输入这样的流)。我认为可以肯定地说,将整个源文件读入内存的开销不值得计算机资源,最终会对您的项目有害。

于 2013-10-16T20:11:33.770 回答
0

编译器经过精心设计,一次只能处理一个字符。他们不会在处理之前读取整个文件,或者他们不需要这样做:那只会增加毫无意义的延迟。他们甚至不需要在处理之前阅读整行。

于 2013-10-25T01:24:09.400 回答