【发布时间】:2014-07-09 04:37:34
【问题描述】:
我在 C 源代码中看到了以下这样的代码,由 gcc 在 Linux 上编译(用于计算机):
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]));
}
}
所以我有一些问题:
- 这里的内联汇编的目的是什么?
- 看起来价格[i]是值,应该是指针吗?
- 在我看来,asm代码只是将prices[i]放入寄存器供以后参考,但是循环数是4000,这没有意义(计算机没有这么多寄存器)
【问题讨论】:
-
volatile表示外部影响可能会改变数据:不要指望每次需要访问时都通过重新加载数据来保持稳定。
标签: c gcc assembly inline-assembly volatile