Pra*_*hal 11 c++ arrays performance pointers pointer-arithmetic
我正在深入研究指针,因为我不认为我对指针有很好的了解,并在维基百科上看到以下几行:
处理数组时,关键查找操作通常涉及一个称为地址计算的阶段,该阶段涉及构造指向数组中所需数据元素的指针.如果数组中的数据元素具有可被2的幂整除的长度,则此算法通常更有效.
为什么会这样?
Mat*_*son 12
乘以2 n乘以左移.现代处理器可以在一个周期内进行移位(在x86中,对于小的移位高达8或16,内置于地址计算本身).在AMD64机器上进行常规乘法运算需要4-10个时钟周期,而在现代英特尔处理器上则很可能类似.如何"闭合"两个连续的乘法运算也有限制.
当然,如果数组的大小非常大,使用乘法指令并更紧密地打包数据(不使用填充将数据扩展到2大小的幂)可能更有效,因为缓存效率
当然,现代编译器很聪明,所以如果需要乘以X乘以12,编译器将生成(X << 3) + (X << 2)
例如比单个乘法运算更快的编译器.
归档时间: |
|
查看次数: |
565 次 |
最近记录: |