当定义 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/