0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么很少有人按列去遍历访问二维数组呢?

学益得智能硬件 来源:学益得智能硬件 2023-02-12 09:47 次阅读

poYBAGPoReuAZSOOAAFbl1gz_lg854.jpg

分享一道360的C语言笔试题。x是一个行列均为1000的二维数组,下面代码运行效率最高的是哪个?

二维数组大家都很熟悉,正常人遍历二维数组都是一行一行来的,为什么很少有人按列去遍历?

这道笔试题其实考察的就是遍历效率的问题。

选项A,j是行,i是列,很显然 x[i][j] 是按列访问,先是第一列第一个元素,然后第一列第二个元素,以此类推。

pYYBAGPoRdWAVHvyAAC5aBaWhVM911.jpg

选项B和选项C都存在按列访问。

只有选项D,属于正常的按行遍历。

那么问题来了,为什么二维数组按行遍历比按列遍历来的快?

这个涉及的问题就太多了,得从CPU高速缓存讲起。

e3189b6e-a9e3-11ed-bfe3-dac502259ad0.png

CPU处理速度很快,但是访问内存太慢,严重影响了机器运行效率。

于是就出现了高速缓存。

从名字应该能看出,访问它速度确实快。

当CPU发出内存访问请求时,会首先查看缓存内是否有请求的数据,如果有,直接返回,如果没有,就要先把内存中的数据载入缓存,再把它返回给处理器

由于缓存比内存贵很多,所以它的大小一般都以KB或者MB为单位,如果是一级缓存,那就更小了。

题目中的二维数组大小接近4M,CPU在访问的时候,缓存先从内存抓取数据,而且一般都是抓取相邻整个数据块,简单点理解,就是当前行以及后面的部分数据,这也符合内存访问局部性特征。

如果二维数组按列遍历,就需要不断的抓取内存的数据,降低程序效率,这也将会失去缓存的意义。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19259

    浏览量

    229657
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10855

    浏览量

    211594
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136702

原文标题:为什么二维数组都是一行一行访问?

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    二维数组按照某进行重新排序

    来到这边很久了,也从来没自己发过帖。今天面试,出了一个对二维数组按照某进行重新排序。小弟本来对数组这方面不是特别熟悉,想了半天结果没做出
    发表于 03-09 22:22

    怎么求二维数组均值啊

    `怎么、行求得二维数组的均值啊`
    发表于 09-06 12:45

    二维数组循环更新程序

    程序实现了把生成的一数组更新二维数组功能。基本实现了LabVIEW二维
    发表于 10-13 13:20

    任意指定排序2数组

    本帖最后由 ltoad 于 2015-12-9 23:11 编辑 输入为一个二维数组A,数不定要求以指定进行排序,比如指定第0,
    发表于 12-09 23:02

    C语言二维数组的定义和引用

    线性排列的。如何在一存储器中存放二维数组,可有两种方式:一种是行排列, 即放完一行之
    发表于 07-12 08:55

    二维数组冒泡排序

    Labview中对于一数组可以直接排序,但如果是二维数组时,特别是字符串类型二维数组,某一
    发表于 09-30 16:06

    请问C语言怎么实现在二维数组里循环遍历

    怎么用C语言实现在二维数组里循环遍历
    发表于 03-17 04:35

    C语言程序设计教程之二维数组如何应用二维数组的资料概述

    本文档的主要内容详细介绍的是C语言程序设计教程之二维数组如何应用二维数组的资料概述主要内容包括了:1 了解二维
    发表于 10-26 16:48 3次下载

    螺旋遍历二维数组漫画讲解

    来自公众号:程序员小灰 第天 什么意思?我们来举个例子,给定下面这样一个二维数组: 我们需要从左上角的元素1开始,按照顺时针进行螺旋遍历
    的头像 发表于 11-26 14:01 1749次阅读

    二维数组数组指针以及指针数组

    二维数组数组指针以及指针数组
    的头像 发表于 08-16 09:02 2655次阅读

    C语言—二维数组介绍

    定义一个两行三二维数组,总共有6个元素
    的头像 发表于 09-11 14:51 902次阅读
    C语言—<b class='flag-5'>二维</b><b class='flag-5'>数组</b>介绍

    二维数组存储最小元素是怎么实现的?

    二维数组存储最小元素是怎么实现的?  在计算机编程中,数组是一种非常重要的数据结构之一。它用于存储一系列相同类型的变量,这些变量被放入单一的数组中并通过一个唯一的编号(称为
    的头像 发表于 09-13 11:17 532次阅读

    python怎么创建二维数组

    它们的优缺点和一些常见的操作。 使用嵌套列表创建二维数组: 嵌套列表是Python中创建二维数组最简单和最基本的方法之一。每个内部的列表都代表了一行或者一
    的头像 发表于 11-21 15:10 3734次阅读

    python如何定义二维数组

    在Python中,可以通过使用列表嵌套的方式来定义二维数组。具体步骤如下: Step 1: 创建一个空的二维列表 要创建一个空的二维数组
    的头像 发表于 11-21 15:12 1767次阅读

    将一数组转为二维python

    过程。接下来,我将为你详尽、详实、细致地介绍四种常用的方法。 方法一:使用列表推导式(List Comprehension) 这是一种简单而又优雅的方法,可以快速将一数组转换为二维数组
    的头像 发表于 11-23 14:54 5438次阅读