从数组性能中读取

时间:2014-06-19 10:04:19

标签: c arrays performance matlab memory

在C语言(以及Matlab等高级语言)中,如果想重复使用存储在数组中的(常量)值,最好将它存储在一个单独的变量中,即:

  

double array [] = {1,2,3,4,5,...};

     

double quantity = array [3];

必要时使用quantity,还是使用array[3]速度一样快?

我问的原因是array[3] = *(array+3)因此必须执行加法操作才能从数组中读取,而quantity可以直接读取。

1 个答案:

答案 0 :(得分:0)

我不确切知道改进了多少,但当您a[3] *(a+3)时,pow()可以通过以下方式找到:

  1. 获取(访问程序计数器和其他寄存器)的基址。
  2. 将偏移量添加到此地址以获取[3]的地址(使用ALU)。
  3. 然后获取a [3]的值(再次访问寄存器)。
  4. 在研究处理器的架构(如MIPS)时,这一切都已成为现实。

    所以,像你一样存储变量总是更好。

    虽然现代编译器可能支持使用Cache来存储常用数据,而不是每次都访问内存。

    我想从math.h添加double begin = clock(); for(long long int i=0;i<pow(10,9);++i); printf("%lf",(clock()-begin)/CLOCKS_PER_SEC); 的示例。

    pow(10,9)

    如果首次存储{{1}},则上述代码可能会略微提升性能。