gpt4 book ai didi

c++ - 为什么数组元素长度的地址计算可以被 2 的幂整除更有效?

转载 作者:可可西里 更新时间:2023-11-01 15:03:15 26 4
gpt4 key购买 nike

我正在深入研究指针,因为我不认为我对指针有很好的了解,并且在维基百科上遇到了以下行:

When dealing with arrays, the critical lookup operation typically involves a stage called address calculation which involves constructing a pointer to the desired data element in the array. If the data elements in the array have lengths that are divisible by powers of two, this arithmetic is usually much more efficient.

为什么会这样?

The above line is written under the heading "Uses"

最佳答案

乘以 2n 是通过左移完成的。现代处理器可以在单个周期内进行移位(在 x86 中,对于高达 8 或 16 的小移位,内置在地址计算本身中)。常规乘法运算在 AMD64 机器上需要 4-10 个时钟周期,在现代英特尔处理器上很可能类似。对于两个连续的乘法运算如何“靠在一起”也有限制。

当然,如果数组的大小相当大,使用乘法指令并将数据打包得更紧密(而不是使用填充将数据扩展到 2 的幂大小)可能会更有效,因为缓存效率

当然,现代编译器很聪明,所以如果你需要用 X 乘以 12,编译器会生成 (X << 3) + (X << 2) ,例如,它比单个乘法运算更快。

关于c++ - 为什么数组元素长度的地址计算可以被 2 的幂整除更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20867746/

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