我用C++为我创建的语言构建了一个解释器.
设计中的一个主要问题是我在语言中有两种不同的类型:数字和字符串.所以我必须传递一个结构,如:
class myInterpreterValue
{
myInterpreterType type;
int intValue;
string strValue;
}
Run Code Online (Sandbox Code Playgroud)
在例如:我的语言中的倒计时循环期间,此类的对象每秒传递大约一百万次.
分析指出:85%的性能是由字符串模板的分配功能吃掉的.
这对我来说非常清楚:我的解释器设计不好,并且不使用指针.然而,我没有选择:在大多数情况下我不能使用指针,因为我只需要复制.
怎么办对此?像这样的班级是个更好的主意吗?
vector<string> strTable;
vector<int> intTable;
class myInterpreterValue
{
myInterpreterType type;
int locationInTable;
}
Run Code Online (Sandbox Code Playgroud)
所以类只知道它代表什么类型和表中的位置
然而,这又有一些缺点:我必须在字符串/ int向量表中添加临时值,然后再次删除它们,这将再次消耗大量性能.