gpt4 book ai didi

c - 从数组读取性能

转载 作者:行者123 更新时间:2023-11-30 17:32:14 25 4
gpt4 key购买 nike

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

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

double quantity = array[3];

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

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

最佳答案

我不知道到底有多少改进,但是当你执行 a[3] 时,*(a+3) 可以通过以下方式找到:

  1. 获取a的基地址(访问程序计数器和其他寄存器)。
  2. 将该地址加上偏移量即可得到a[3]的地址(使用ALU)。
  3. 然后获取 a[3] 的值(再次访问寄存器)。

在研究处理器(如 MIPS)的架构时,这一切都会浮现出来。

因此,像您所做的那样存储变量总是更好。

尽管现代编译器可能支持使用缓存来存储经常使用的数据,而不是每次都访问内存。

我想添加来自 math.hpow() 示例。

double begin = clock();
for(long long int i=0;i<pow(10,9);++i);
printf("%lf",(clock()-begin)/CLOCKS_PER_SEC);

如果首先存储 pow(10,9),上述代码可能会显示出轻微的性能改进。

关于c - 从数组读取性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24303939/

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