c - 矩阵定义顺序和内存顺序不一样

标签 c memory matrix

当定义 4 个矩阵时,我确定它们在内存中的顺序相同,但是......

include <stdio.h>
define ROWCOUNT (3)
define COLUMNCOUNT (4)

int imat[ ROWCOUNT ][ COLUMNCOUNT ]; 
char cmat[ ROWCOUNT ][ COLUMNCOUNT ];
double dmat[ ROWCOUNT ][ COLUMNCOUNT ];
int rmat[ ROWCOUNT ][ COLUMNCOUNT ]; 

这是我使用的代码,这是不同矩阵的地址: 定位每个矩阵中的第一个元素

Examining imat: memory at: 1004061c0
Examining cmat: memory at: 1004062a0
Examining dmat: memory at: 100406240
Examining rmat: memory at: 100406200

好吧,我可能只是瞎了眼,但对我来说,它们的顺序似乎是 i-r-d-c,而且(甚至相反)与定义顺序不同。为什么它们在内存中的顺序错误?

谢谢你的帮助:)

最佳答案

可能的原因是这些数组的大小不同(cmat 为 12 字节,dmat 可能为 96 字节)并且编译器重新排列它们以满足某些对齐要求。一种常见的技术是首先放置对齐要求最严格的对象(整数、 double ),最后放置要求最少的对象(如字符数组)。这样,由于填充 造成的内存浪费将降至最低。

但是,为什么要关心不同对象在内存中的顺序呢?如果你想强制一个序列,把它们放在同一个结构中(结构成员必须出现在它们声明的序列中)。

关于c - 矩阵定义顺序和内存顺序不一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19355806/

相关文章:

Mysql多变量线性回归

我可以在 C99 中使用数组作为函数参数吗?

c - 使用带指针的递归函数

c++ - VS 2010 中的内存限制与 c++ 或只是另一个错误?

c - 为什么当我使用 `malloc()` 时,数据模式会出现在内存中?

c - 任意大小的矩形矩阵的运行时高效转置

c++ - 如何从 C++ 文件中读取矩阵?

CreateFile() 可以在两个不同的线程中同时打开一个文件吗

c - 使用memcpy复制不同类型的数组

javascript - 在测试套件期间获取 Javascript 内存分析