我们正在为高级编译语言编写一个字节码,经过一些分析和优化后,很明显,当前最大的性能开销是我们使用的switch语句跳转到字节码的情况。标签地址(MSVC)
我们调查了拔出每个案例标签的地址并将其存储在字节码本身的流中,而不是我们通常打开的指令ID。如果我们这样做了,我们可以跳过跳转表,直接跳到当前正在执行的指令的代码位置。这在GCC中非常有效,但是,MSVC似乎不支持这样的功能。
我们试图使用内联汇编来获取标签的地址(并跳转到它们),并且它可以工作,但是,使用内联汇编会导致MSVC优化器避免整个函数。
有没有办法让优化器仍然运行代码?不幸的是,我们不能将内联程序集提取到另一个函数中,而不是标签所在的函数,因为即使在内联程序集中,也无法为另一个函数引用标签。任何想法或想法?非常感谢您的意见,谢谢!
您是否尝试过函数指针? –
如何在字节码中放置函数地址而不是标签地址?然后,每个指令ID都有一个函数。除非你的获取执行循环在你的大功能标签中。 –
如果我使用每种情况下的函数,并使用函数指针而不是标签地址,它将起作用。但是,我觉得函数调用的开销会非常大,即使函数是微不足道的(无参数,不返回),也会使性能增益无效。我会尝试一下,并感谢张贴。 – Trevor