我創建了一個非常簡單的代碼來學習向量訪問是否比矩陣訪問快。矢量訪問比矩陣訪問更快嗎?
我試圖3兩件事:
1:
int *matrix=(int*)malloc(sizeof(int)*100000*1000)
for(long int=x;x<100000*1000;x++)matrix[x]=1;
2:帶有int 100.000.000元件創建向量創建具有相同大小的矩陣:
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;
}
}
次
始終矩陣訪問(情況2)需要2倍的情況下圖1和3,外殼3是有點快然後情況1 我使用-O2 PARAM在我的C++編譯器(克++)
我可以理解爲什麼向量比矩陣快:(但我會喜歡一些解釋)。 但我不明白爲什麼案例3比案例1更快,我想到乘法過程會使事情減慢很多,而不是讓它變得更快。 我不明白爲什麼,即使差異是0.002(這可能是時間和處理器使用的時間(我想象))
如果我編譯所有3個案例沒有優化案例2是比情況1更慢,情況3. 因此,沒有優化過程,情況1更快。
矢量速度通常更快嗎?
謝謝