二维数组逐行和逐列遍历效率

11 篇文章 1 订阅
5 篇文章 0 订阅

按行遍历效率高

首先数组在内存中是按行存储的,按行遍历时可以从数组首元素地址一直走下去,就可以遍历完整个数组,而按列遍历则需要每次指向每一列的第n行元素;

但是指针寻址很快,所以并不会有明显的区别;

那么到底按行遍历比按列遍历效率高在哪里呢?

1:CPU高速缓存

CPU高速缓存是用于减少处理器访问内存所需平均时间的部件。在金字塔存储体系中位于第二层,仅次于CPU寄存器;其容量远小于内存,但是速度却可以接近处理器的频率。当处理器发出访问请求时,会先查看缓存内是否有请求数据,如果存在(命中),则直接返回数据而不访问内存,如果不存在,则要先把内存中的数据载入相应缓存,在返回给处理器。
缓存从内存中抓取一般都是整个数据块,意味着抓取到的是物理内存连续的,基本上是同行不同列的,如果采用按列遍历的话,将会使整个缓存块无法被利用,从而不得不从内存中重新读取数据,从内存中读取数据的速度远远小于从缓存中读取数据。

2:分页调度

物理内存是以页的方式进行划分的,当一个二维数组很大,int arr[128][1024],假设一页的内存未4096个字节,那么每一行正好占据一页。如果按列遍历,就会发生128*1024次页面调度,如果按行遍历,只有128次页面调度,页面调度是有时间调度的,因此调度次数越多,遍历时间就越长。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值