c - 是否有一种传统方法可以在 C 中花费恰好一个时钟周期?

标签 c

本质上,我想在汇编中执行“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/

相关文章:

c - Qt C 错误重复符号 _function_names in juicy_lucy.o 和 main.o for architectures x86_64

CS50 拼写器 : Unload executes 80, 000,000+ 免费

c++ - 所有全局变量都应该是 volatile 限定的吗?

c - "functions"是 x86 硬件的基本部分吗?

c - 如何在不堆叠旧数据的情况下接收UDP数据

c# - 无法导入.NET Core 3.0加载的DLL

c - 为什么c语言中的putchar()中x - x什么都没有?

java - SIGSEGV Android JNI 空方法

c - 当数组在其他文件中且函数在其他文件中时,查找整数或 float 组的大小?

c - 调试链接器错误( undefined symbol )