gpt4 book ai didi

c - gcc,asm volatile ("": : "r" (x)) 的目的是什么

转载 作者:太空宇宙 更新时间:2023-11-03 23:26:58 27 4
gpt4 key购买 nike

我在C源代码中看到过这样一段代码,在Linux(计算机)上由gcc编译:

extern double prices[4000];

void somefunction()
{
//this function is called again after each 5 seconds interval

//some long codes that use prices[]
// ...

int i;
for (i=0; i<4000; i++)
{
asm volatile ("" : : "r" (prices[i]));
}
}

所以我有一些问题:

  1. 此处内联汇编的目的是什么?
  2. 看起来 prices[i] 是值,它应该是指针吗?
  3. 在我看来,asm代码只是将prices[i]放入寄存器供以后引用,然而,循环次数为4000,这没有意义(计算机没有那么多寄存器)

最佳答案

volatile 关键字告诉编译器不允许移动这个汇编 block 。

asm (""::::"memory") 是一个简单的编译器栅栏。

来自 here :

You can prevent an asm instruction from being deleted by writing the keyword volatile after the asm. [...] The volatile keyword indicates that the instruction has important side-effects. GCC will not delete a volatile asm if it is reachable.

关于c - gcc,asm volatile ("": : "r" (x)) 的目的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24645498/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com