数组类型优化与动态静态数组解析
1. 数组操作的汇编优化
在某些情况下,编译器会对数组操作进行优化。例如,Visual C++ 会用 80x86 的 stosd 指令替代三个循环来对数组元素置零。以下是相关的汇编代码:
push edi
;
; The following code zeros out the 27 (3 * 3 * 3) elements
; of the ThreeByThreeByThree array.
mov ecx, 27 ; 0000001bH
xor eax, eax
mov edi, OFFSET FLAT:_ThreeByThreeByThree
rep stosd
不过,如果重新排列索引,使得零值不是存储到连续的内存位置,Visual C++ 将不会编译成 stosd 指令。因为编译器认为 stosd 的语义不同。
从硬件角度看,现代 CPU 的性能高度依赖于缓存的有效性。缓存性能又取决于数据的时间和空间局部性。所以,访问数组元素时要避免打乱时间局部性,不一致的访问方式会严重影响空间局部性,进而降低应用程序的性能。因此,建议采用编译器的数组组织方式,除非你清楚自己在做什么。
2. 提高数组访问效率的规则
在应用程序中使用数组时,可遵循以下规则:
- 优先使用一维数组 :当一维数组能满足需求时,不要使用多维数组。但不建议手动计算行主序
超级会员免费看
订阅专栏 解锁全文
76

被折叠的 条评论
为什么被折叠?



