本质上,我想在汇编中执行“NOP”。 我知道存在像 (void)0 这样的技巧,但据我所知,这些技巧实际上什么也没有编译。我想要的是编译时会浪费一个时钟周期的东西。有没有标准的方法来做这样的事情?
最佳答案
根据编译器的具体情况,您可以创建一个裸函数,在 asm 内联
代码块中执行 NOP
。
在 VC++ 中,会是这样的:
__declspec(naked) void foo()
{
__asm NOP;
}
旁注:您也可以使用 _emit
关键字。在 IA-32 中,这样做看起来像这样:
__asm
{
_emit 0x90; // This will effectively creates a NOP instruction.
}
GCC 和 Clang 中的替代方案是:
asm volatile("nop");
请记住,裸函数没有任何类型的序言或尾声。
正如 Eric Postpischil 在评论中指出的那样,根本无法保证 NOP
指令将恰好花费 1 个周期来执行。
关于c - 是否有一种传统方法可以在 C 中花费恰好一个时钟周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57549347/