gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:55 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com