标题可能有点不清楚,所以在这里澄清一下:
问题:
a = b + c * d;
在我的实现中解决了这两个“指令”
mul(c, d, temp)
add(b, temp, a)
我目前正在使用临时对象来存储临时值,这要求将临时值存储在 RAM 中并在需要时再次获取它,这两者都不是真正需要的并且性能较低。
我正在用 C++ 实现 VM,所以我的问题是是否有一些可移植的方法来避免将临时值存储到主内存中,但将它们保存在实际的 CPU 寄存器中?
我已经使用register
关键字进行了一些测试,但是从性能改进的不足来看,我会说编译器忽略了它。
作为最后的手段,我愿意进行平台特定的组装,但我对这个主题几乎一无所知,所以如果这是唯一可能的方法,欢迎提供好信息。我确实意识到我给出的这个例子是一个基本的例子,它很可能会遇到需要大量临时对象的情况,在这种情况下应该有一些方法来确定要使用和使用多少寄存器其余的内存存储...
也许有一些方法可以要求寄存器存储,如果编译器“用完”寄存器,自动将临时压入堆栈?就我对汇编的熟悉程度而言,您可以通过名称“寻址”特定寄存器,而我不清楚编译器究竟如何处理潜在的寄存器使用冲突......