我经常用来记住单个矢量中的所有矩阵,因为我的书说使用单个矢量更快。并且对矩阵的访问时间较慢。 如果我有这样的代码:
int main(int argc, char **argv)
{
int mat[10][10],i;
for(i=0;i<10;i++)
mat[i][0]=99;
int *ptr=&mat[0][0];
for(i=0;i<10;i++)
{
printf("%d\n",*ptr);
ptr+=10;
}
return 0;
}
我尝试运行它4/5次,所有时间打印10次99次。 那么矩阵也会记忆在内存的连续位置吗?总是? 如果是,为什么访问矢量更快?
答案 0 :(得分:2)
如果用“矩阵”表示二维数组,那么是的,它们在连续的记忆中。 C中的2D数组只是数组的数组(行主要)。如果用矢量表示1D数组,则没有理由它应该比访问2D数组更快。
答案 1 :(得分:1)
好吧,数组(在C中)存储在连续的内存中,由于你的mat
是数组数组,它也存储在一个连续的内存中。我认为通过一个索引取消引用(当你有一些分离的1D数组时)可能比通过两个索引(在矩阵中)解除引用要快一些,但差别太小而不用担心。
答案 2 :(得分:1)
C没有像其他语言一样的多维数组,它称之为 multidimensional ,但它们实际上是数组的数组。
C阵列是连续的。
(C99,6.2.5p20)“数组类型描述了具有特定成员对象类型的连续分配的非空对象集,称为元素类型。”