行主序、列主序概念辨析以及基地址的含义

本文详细解释了数组在内存中的两种存储方式:行主序和列主序,以及基地址的概念。行主序按行依次存储数据,列主序则按列进行存储,基地址为数组的起始位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

行主序:在数组中按照a[0][0]、a[0][1]、a[0][2]…a[1][0]、a[1][1]、a[1][2]…依次存储数据
列主序:在数组中按照a[0][0]、a[1][0]、a[2][0]…a[0][1]、a[1][1]、a[2][1]…依次存储数据
基地址:即数组首元素地址,数组的起始地址。

(Row-Major)(Column-Major)是矩阵数据在内存中存储的两种不同方式,要区别体现在**内存布局**、**访问效率****数学运算习惯**上,具体如下: ### 1. **内存布局** - ****:矩阵按依次存储,即先存储第一的所有元素,再存储第二,依此类推。 例如,4x4矩阵 `M` 的存储顺为: `M[0][0], M[0][1], M[0][2], M[0][3], M[1][0], M[1][1], ..., M[3][3]`。 - ****:矩阵按依次存储,即先存储第一的所有元素,再存储第二,依此类推。 同一矩阵的存储顺为: `M[0][0], M[1][0], M[2][0], M[3][0], M[0][1], M[1][1], ..., M[3][3]`。 ### 2. **访问效率** - ****:适合按访问的场景(如遍历每一的所有元素),因为内存中连续存储,缓存命中率高。 - ****:适合按访问的场景(如遍历每一的所有元素),同样因连续存储而高效。 **注意**:在图形学中,矩阵乘法(如模型变换)通常涉及向量或向量的点积,存储顺会影响计算效率。 ### 3. **数学运算习惯** - ****:默认用于**向量**乘法(如 `v * M`),即向量在矩阵左侧。 例如,OpenGL 部分数学库(如 Eigen)默认使用。 - ****:默认用于**向量**乘法(如 `M * v`),即向量在矩阵右侧。 例如,Direct3D 的 HLSL 默认使用(除非显式指定 `row_major`)。 ### 4. **对性能的影响** - 在 GPU 编程中(如 D3D12/HLSL),矩阵存储顺需与着色器代码一致,否则可能导致错误的变换结果。 例如,若 HLSL 中声明 `column_major`,但 CPU 传递的是数据,需转置矩阵或调整乘法顺。 ### 示例代码(内存布局对比) ```python # 矩阵(按存储) row_major = [ [1, 2, 3], # 第一 [4, 5, 6], # 第二 [7, 8, 9] # 第三 ] # 内存顺:1, 2, 3, 4, 5, 6, 7, 8, 9 # 矩阵(按存储) column_major = [ [1, 4, 7], # 第一 [2, 5, 8], # 第二 [3, 6, 9] # 第三 ] # 内存顺:1, 4, 7, 2, 5, 8, 3, 6, 9 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值