首页 > 其他分享 >二维数组按行存储和按列存储计算方法

二维数组按行存储和按列存储计算方法

时间:2024-12-30 12:29:19浏览次数:3  
标签:存储 text 元素 按列 地址 按行

二维数组按行存储和按列存储计算方法

二维数组的基本结构

一个二维数组通常是逻辑上的一个矩阵。例如,a[m][n] 表示一个二维数组,包含 m 行和 n 列:

a[0][0], a[0][1], ..., a[0][n-1]
a[1][0], a[1][1], ..., a[1][n-1]
...
a[m-1][0], a[m-1][1], ..., a[m-1][n-1]

内存中的存储方式

  • 按行存储(Row-Major Order):一行中的所有元素按顺序存放在内存中,接着存放下一行。例如,a[0][0], a[0][1], ..., a[0][n-1], a[1][0], a[1][1], ...
  • 按列存储(Column-Major Order):一列中的所有元素按顺序存放在内存中,接着存放下一列。例如,a[0][0], a[1][0], ..., a[m-1][0], a[0][1], a[1][1], ...

按行存储

在按行存储中,元素是按行的顺序线性排列的。对于 a[i][j],其地址计算公式为:

公式
地址 = 基地址 + ( i ⋅ n + j ) ⋅ 元素大小 \text{地址} = \text{基地址} + (i \cdot n + j) \cdot \text{元素大小} 地址=基地址+(i⋅n+j)⋅元素大小

解释

  • i 表示行号。
  • j 表示列号。
  • n 是列数(即每行的元素个数)。
  • 元素大小 是每个元素占用的字节数(例如 int 通常占 4 字节)。

示例:

假设有一个二维数组 a[3][4],按行存储,基地址为 1000,元素为 int 类型(每个占 4 字节)。访问 a[2][3] 的地址:

  1. 行号 i = 2,列号 j = 3,列数 n = 4
  2. 偏移量计算: (2 × 4 + 3) × 4 = 44 字节。
  3. 地址为:1000 + 44 = 1044

按列存储

在按列存储中,元素是按列的顺序线性排列的。对于 a[i][j],其地址计算公式为:

公式
地址 = 基地址 + ( j ⋅ m + i ) ⋅ 元素大小 \text{地址} = \text{基地址} + (j \cdot m + i) \cdot \text{元素大小} 地址=基地址+(j⋅m+i)⋅元素大小

解释

  • j 表示列号。
  • i 表示行号。
  • m 是行数(即每列的元素个数)。
  • 元素大小 是每个元素占用的字节数。

示例:

假设有一个二维数组 a[3][4],按列存储,基地址为 1000,元素为 int 类型(每个占 4 字节)。访问 a[2][3] 的地址:

  1. 列号 j = 3,行号 i = 2,行数 m = 3
  2. 偏移量计算: (3 × 3 + 2) × 4 = 44 字节。
  3. 地址为:1000 + 44 = 1044

对比总结

存储方式地址计算公式数据排列顺序
按行存储 基地址 + ( i ⋅ n + j ) ⋅ 元素大小 \text{基地址} + (i \cdot n + j) \cdot \text{元素大小} 基地址+(i⋅n+j)⋅元素大小按行连续存储:一行接一行
按列存储 基地址 + ( j ⋅ m + i ) ⋅ 元素大小 \text{基地址} + (j \cdot m + i) \cdot \text{元素大小} 基地址+(j⋅m+i)⋅元素大小按列连续存储:一列接一列

标签:存储,text,元素,按列,地址,按行
From: https://blog.csdn.net/2302_79730293/article/details/144787700

相关文章

  • 资料DRV8210PDSGR 12V 电机驱动器、THGBMJG6C1LBAB7 高性能e-MMC存储器、LAN7800-I/Y9
    DRV8210PDSGR12V、1AH桥电机驱动器说明:DRV8210P是一款集成电机驱动器,具有4个N沟道功率FET、电荷泵稳压器和保护电路。三倍电荷泵架构允许该器件在低至1.65V的电压下工作,以适应1.8V电源轨和低电池条件。电荷泵集成了所有电容器,以减小PCB上电机驱动器的整体解决方......
  • 云上攻防-云服务&对象存储&Bucket桶&任意上传&域名接管&AccessKey泄漏
    知识点:1、云服务-对象存储-权限配置不当2、云服务-对象存储-域名解析接管3、云服务-对象存储-AccessKey泄漏章节点:云场景攻防:公有云,私有云,混合云,虚拟化集群,云桌面等云厂商攻防:阿里云,腾讯云,华为云,亚马云,谷歌云,微软云等云服务攻防:对象存储,云数据库,弹性计算服务器,VPC&RAM等......
  • DiskSpd 是一个由微软开发的强大的存储性能测试工具,主要用于测试磁盘、存储设备和系统
    ReleaseDISKSPD2.2·microsoft/diskspd·GitHub 什么是DiskSpd?DiskSpd是一个由微软开发的强大的存储性能测试工具,主要用于测试磁盘、存储设备和系统的I/O性能。它是一个命令行工具,允许用户模拟不同的负载模式(如顺序读取、顺序写入、随机读取、随机写入等)来评估磁盘......
  • RocketMQ消息存储概念篇
    一、引言消息存储作为RocketMQ最重要,最复杂的一个模块,理解和掌握好它的消息存储机制,对学习RocketMQ来说是至关重要的,接下来对于其中的核心理论知识先有一个了解。二、RocketMQ消息存储概述在了解下面的内容之前我们先来看一下消息存储整体的架构图:2.1消息存储文件构成Ro......
  • emoji在mysql中存储失败的问题(mysql字符集替换)
    mysql字符集需要utf8mb4才能支持emoji存储,因为utf8一个字符最大3字节,但emoji4字节,所以需要升级成真正的UTF-8mysql的uft8最大只有3字节,是因为mysql开发认为3字节足以存储常见字符。后续的uft8mb4(mostbytes4)才是完整的4字节UTF-8修改表及所有字段的默认字符集#修改表及所有......
  • InnoDB存储引擎
      6.1逻辑存储结构InnoDB的逻辑存储结构如下图所示:6.2架构6.2.1概述MySQL5.5版本开始,默认使用InnoDB存储引擎,它擅长事务处理,具有崩溃恢复特性,在日常开发中使用非常广泛。下面是InnoDB架构图,左侧为内存结构,右侧为磁盘结构。6.2.2内存结构在左侧的内存结构中,主......
  • 操作系统模拟虚拟存储器的地址变换过程
    设计用于模拟快表、页表、地址变换所用的寄存器的数据结构;编制页表的初始信息文件,举例说明文件中具有的信息:共有5块,每块的状态、在内存和外存的起始地址等。编程实现虚拟存储器地址变换算法程序,动态输入所要访问的逻辑地址,变换过程文字描述以及变换后的物理地址;测试:输入......
  • Ceph存储
    第一章:存储概念介绍什么是存储storage简单来说,存储就是存放数据的介质,我们平时最常见的存储就是U盘、移动硬盘、笔记本使用的机械或固态硬盘等等。在服务器领域,为了数据的安全性,业务数据一般要与系统分开而且重要的业务数据一般是通过某种共享技术(nfs)挂载到远程存储上的......
  • 视图、存储过程、触发器 整理
    //视图//视图就是基表的映射//创建视图//create[orreplace]view视图名称[(视图列表)]asselect语句[with[cascaded|local]checkoption];//查看创建视图语句//showcreateview视图名称;//查看视图书记//select*from视图名称...;//修改视图//方......
  • 江科大STM32学习:10 DMA直接存储器取存
    参考STM32F0xxx参考手册>2.存储器和总线架构<>10.DMA<1.DMA简介2.存储器映像类型起始地址存储器用途ROM0x08000000程序存储器Flash存储C语言编译后的程序代码0x1FFFF000系统存储器存储BootLoader,用于串口下载0x1FFFF800选项字节存储一些独立于程序代码的配置参数RAM......