【发布时间】:2011-02-04 02:04:26
【问题描述】:
在我的实验性编程语言的解释器中,我有一个符号表。每个符号由一个名称和一个值组成(该值可以是例如:字符串、int、函数等类型)。
起初我用一个向量来表示表格,并遍历符号检查给定的符号名称是否合适。
然后我虽然使用地图,在我的情况下是 map<string,symbol>,但会比一直遍历向量要好 但是:
这部分有点难解释,但我会努力的。
如果在我的语言程序中第一次检索变量,当然必须找到它在符号表中的位置(现在使用向量)。如果我每次执行该行时都遍历该向量(想想一个循环),那将非常慢(就像目前一样,几乎与微软的批处理一样慢)。
所以我可以使用映射来检索变量:SymbolTable[ myVar.Name ]
但请考虑以下情况:如果第一次找到仍然使用向量的变量,我可以将其确切的整数位置存储在向量中。这意味着:下次需要它时,我的解释器知道它已被“缓存”并且不会在符号表中搜索它,而是执行SymbolTable.at( myVar.CachedPosition ) 之类的操作。
现在我的(相当难的?)问题:
我应该为符号表使用向量并缓存变量在向量中的位置吗?
我应该使用地图吗?为什么? [] 运算符有多快?
我应该使用完全不同的东西吗?
【问题讨论】:
-
思考一下,如果您存储变量所在的整数位置,并且之前的某个变量会被垃圾收集或删除,那么您对该整数位置缓存的计划是什么?