我有以下代码可以在PC(x86)上模拟基本系统:
typedef void (*op_fn) ();
void add()
{
//add Opcode
//fetch next opcode
opcodes[opcode]();
}
void nop()
{
//NOP opcode
//fetch next opcode
opcodes[opcode]();
}
const op_fn opcodes[256] =
{
add,
nop,
etc...
};
我通过
opcodes[opcode]()
将此表称为“表格”我正在努力提高口译员的表现。
内联每个函数,例如
inline void add()
inline void nop()
这样做有什么好处吗?
无论如何,它可以使速度更快吗?
谢谢
最佳答案
仅仅因为您将方法标记为inline
,就不需要编译器这样做-它更像是提示而不是命令。
假设您将操作码处理程序存储在数组中,则编译器将需要将函数的地址放入数组中,因此无法内联它。
您的方法实际上没有错。如果您确实认为自己遇到了性能问题,请获取一些指标,否则不要担心(此时!)。函数指针表的概念并不是什么新鲜事物-实际上,这是C++实现虚拟函数(即vtable)的方式。