【发布时间】:2016-08-21 20:22:10
【问题描述】:
我有以下代码可以在我的电脑 (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()
这样做有什么好处吗?
有没有办法让它跑得更快? 谢谢
【问题讨论】:
-
关于工作代码的问题对于codereview.stackexchange.com可能更好
-
你能创建一个与你的模式相匹配的实际工作代码的玩具示例吗?即使有 3 个操作码?正如所写,您的伪代码可以隐藏大的性能问题。此外,“让它变得更好”是一个糟糕的问题。你的代码失败的明确方式更好,或者为什么有些事情是意外的。
-
@tobi303 这是示例/伪代码,与代码审查无关,在该站点上,我们需要真实的工作代码。见A guide to Code Review for Stack Overflow users
-
如果每个操作码函数调用下一个函数,您将(很可能)最终耗尽堆栈空间。将 fetch-and-dispatch 代码移出操作码实现。
标签: c++ virtual-machine emulation machine-language opcodes