我创建了一个非常简单的代码来了解向量访问是否比矩阵访问更快。
我尝试了 3 件事:
1:创建一个包含 100.000.000 个 int 元素的向量:
int *matrix=(int*)malloc(sizeof(int)*100000*1000)
for(long int=x;x<100000*1000;x++)matrix[x]=1;
2:创建一个大小相同的矩阵:
int ** matrix=(int**)malloc(sizeof(int*)*100000);
for(long int=0; x<100000;x++){
matrix[x]=(int*)malloc(sizeof(int*)*1000);
}
for(int x=0; x<100000;x++){
for(int y=0;y<1000;y++){
matrix[x][y]=1;
}
}
3:创建相同的向量,但在其中写入矩阵
for(int x=0; x<100000;x++){
for(int y=0;y<1000;y++){
matrix[(x*1000)+y]=1;
}
}
总是矩阵访问(CASE 2)需要 2 倍的情况 1 和 3。情况 3 比情况 1 快一点。我在我的 C++ 编译器(g++)中使用 -O2 参数
我可以理解为什么向量比矩阵更快:(但我会喜欢一些解释)。但我不明白为什么案例 3 比案例 1 快,我想乘法过程会减慢很多事情,而不是让它更快。我不明白为什么,即使差异是 0.002(可能是时间和当时的处理器使用情况(我想))
如果我在没有优化的情况下编译所有 3 个案例,则案例 2 比案例 1 慢,案例 3。因此,如果没有优化过程,案例 1 更快。
Vector 通常更快?
谢谢