双重for循环语句块的优化
来源:互联网 发布:淘宝最美女店主 编辑:程序博客网 时间:2024/05/01 07:25
双重循环语句的书写,是有讲究的。不同的书写方式,效率会大不一样。有如下代码模块:
typename tArray[20][600];
uint32 uIdxI = 0; //uint32 is short for unsigned int
uint32 uIdxJ = 0;
for (uIdxI = 0; uIdxI < 20; uIdxI++)
{
for (uIdxJ = 0; uIdxJ < 600; uIdxJ++)
{
tArray[uIdxI][uIdxJ] = ...; //assign value
}//for, uIdxJ
}//for, uIdxI
对于以行优先存储方式的计算机来说,上述双重循环的运行效率最高。首先,现代的CPU的体系架构大多都用了预测分支技术,如果双重循环中外循环次数为nNumA,内循环次数为nNumB,则总体上预测失败次数为2 * nNumA + 2,在保证运行结果无误的前提下要保证外循环次数比内循环次数小。
其次,现代的计算机体系的存储技术至少都用了局部存储思想,即CPU提取内存的一个位置的数据放到cache中的同时,也会把其附近的数据也提取到cache中,如果内存以行优先存储方式,则提取tArray[0][0]位置的数据的同时,则也会顺便把"tArray[0][1], tArray[0][2], tArray[0][3], tArray[0][4]..."等数据提取出来。
上面提到了两个原理,其中第二个原理要比第一个原理重要,因为“CPU访问cache的速度要远高于访问内存的速度,一般CPU访问SRAM的速度比访问DRAM快1000倍”,分支预测失败顶多是对指令进行调整,而指令本身就是CPU所有,无需访问速度,但是数据则是在内存中,速度就很慢了。
所以,如果操作系统对数组的存储方式是以列优先存储方式安排的,则上述代码中内循环应该放到外面去。
- 双重for循环语句块的优化
- for语句双重循环
- 双重for循环优化
- 一个简单的双重for循环的汇编语句解释
- for双重循环的总结
- oracle的双重for循环
- 17-for的双重循环
- 使用多线程优化双重for循环校验
- 嵌套for循环语句的性能优化
- 双重for循环的几个例子
- sql语句双重循环
- 双重for循环Test
- 循环语句及双重循环
- java跳出双重for循环,跳出双重for循环的内部循环并不执行外重循环内代码
- for语句的循环
- JavaScript 数组双重for循环
- return跳出双重for循环
- Java 双重for循环性能
- 关于Cookie中的Path和domain
- 大有好处呀
- Cookie跨域、虚拟目录, 实现通行证登录_ASP.NET
- ASP.NET专题研究——登录权限
- asp.net 1.1单点登陆
- 双重for循环语句块的优化
- 自己理解软件测试的流程
- 鼠标指针的隐藏
- 资源脚本
- Wince Cab Manager使用方法
- wince隐藏任务栏与桌面图标
- wince添加web server
- wince添加telnet server
- 简便二维码QR图生成器