- 论坛徽章:
- 2
|
本帖最后由 hitcser01 于 2014-06-14 11:37 编辑
我也是新手, 发表一下看法.
1.不知道楼主怎样得出的结论"从右到左不行". 你的确可以试一试嘛.
2.C语言数组按行主序存储,也就是先存第一行,再存第二行. "从左到右"有利于缓存命中. 缓存的速度接近寄存器, 数组元素非常多时, 节约时间的效果很明显.
#
可以看一下我这里的实验效果:- #include <stdlib.h>
- #include <stdio.h>
- #define RAW 10000 //如果有运行错误可以把这2个值减小些
- #define COL 50000
- int a[RAW][COL];//不需要数据的正确性,只需要访问该位置即可验证缓存效果,所以无须初始化.当然,这里全局数据,自动初始化为0了...可以试一试把这个大数组放在函数里,嘿嘿.
- int main(int argc, char *argv[])
- {
- int sum=0;
- int i, j;
- if(1==argc){
- for(i=0;i<RAW;i++){
- for(j=0;j<COL;j++){
- sum += a[i][j];//溢出也没事...
- }
- }
- }
- else{
- for(i=0;i<COL;i++){
- for(j=0;j<RAW;j++){
- sum += a[j][i];//溢出也没事...
- }
- }
- }
- printf("sum:%d\n", sum);
- return 0;
- }
复制代码
- % time ./a.out
- sum:0
- ./a.out 1.73s user 0.24s system 99% cpu 1.974 total
复制代码
- % time ./a.out 1
- sum:0
- ./a.out 1 13.39s user 0.30s system 99% cpu 13.776 total
复制代码 |
|