一个简单C语言问题
for(col=0;col<5;col++){
for(row=0;row<100;row++){
…
}
}
for(row=0;row<100;row++){
for(col=0;col<5;col++){
…
}
}
这两段代码在编译链接运行时,有什么区别啊?学的实在是水,看不出来诶。。。
[解决办法]
a[row][col]一般col放内层好,而a[col][row]一般row放内层好,这样便于编译器优化。
[解决办法]
两个嵌套的for循环,把循环次数多的放在里面,效率会高些。因为大循环放外面会让cache频繁地更新数据,从而耗费大量的时间。
从外层循环进入内层循环是要重新初始化循环计数器的,包括保存外层循环计数器和加载内层循环计数器。退出内层循环时又要恢复外层循环计数器。
这样把循环次数多的放在内层,可以减少上述操作。
[解决办法]
如果操作的是二维数组arry[row][col],这样的话,col最好就放在内层了。
因为数组的存储格式是连续的。
比如arry[3][3]={{1,2,3},{4,5,6},{7,8,9}};它在内存中的位置顺序是1,2,3,4,5,6,7,8,9;按照col的方式可以连续访问,这样效能就会高得多。