GCC编译器执行asm volatile("nop"/::)指令需要多长时间?

cla*_*oes 1 c assembly gcc timer nop

我在UNIX中有一个C代码,我需要让我的处理器不做任何操作2秒钟.为了做到这一点,我发现汇编指令asm volatile("nop"::).我搜索了很多,但我找不到任何地方解释如何计算必要的NOP数量才能执行我的功能2秒钟.谁能帮我?

for(i = 0; i < COUNTER; i++){
    asm volatile ("nop"::);
}
Run Code Online (Sandbox Code Playgroud)

oua*_*uah 5

NOP指令在大多数微处理器中占用一个周期,所以算一算:

例如,在8 MHz处理器上,一个周期需要1/8 MHz = 125 ns.然后,您必须为循环的管理添加更多周期.

如果您处于具有OS的环境中,则不应依赖NOP指令等待几秒钟,并且不应使用活动等待.在POSIX系统(如UNIX)上,使用POSIX nanosleep函数.

  • 现代CPU通常是超标量的,NOP没有依赖关系,因此它可以有效地占用一小部分周期(就吞吐量而言) (3认同)