C++ C++;:这两种将数字写入矩阵的方法之间是否存在显著的速度差异?
我想知道以下两种将数字存储在矩阵对角线中的方法是否会有显著的速度/性能差异: 方法1:C++ C++;:这两种将数字写入矩阵的方法之间是否存在显著的速度差异?,c++,arrays,C++,Arrays,我想知道以下两种将数字存储在矩阵对角线中的方法是否会有显著的速度/性能差异: 方法1: //... int matrix[xres][yres]; for(yindex = 0; yindex < yres; yindex += 1){ for(xindex = 0; xindex < xres; xindex += 1){ matrix[xindex][xindex] = 1; } } /。。。 整数矩阵[xres][yres]; 对于(yind
//...
int matrix[xres][yres];
for(yindex = 0; yindex < yres; yindex += 1){
for(xindex = 0; xindex < xres; xindex += 1){
matrix[xindex][xindex] = 1;
}
}
/。。。
整数矩阵[xres][yres];
对于(yindex=0;yindex
方法2:
//...
int matrix[xres][yres];
for(yindex = 0; yindex < yres; yindex += 1){
for(xindex = 0; xindex < xres; xindex += 1){
if(xindex == yindex){
matrix[xindex][yindex] = 1;
}
}
}
/。。。
整数矩阵[xres][yres];
对于(yindex=0;yindex
我想说,在方法1中,代码更容易阅读,更紧凑。
方法2仅在当前矩阵元素位于对角线上时写入内存,而方法2将在for循环的每个循环上写入
方法1是否需要更多的时间或性能,尤其是对于xres
和yres
的大值?
在本例中,我试图将图像的颜色值存储在矩阵中,这意味着
xres
和yres
的值大约在500-2000之间。方法1在yres
时具有未定义的行为,因此关于其性能的问题是没有意义的。(在这种情况下,会有一些迭代,在这些迭代中,yres您对所讨论的值的方法进行了测试并计时了吗?发生了什么事?哪一个结果更快了?两者都是对CPU周期的完全浪费。您只需要一个循环。这就是基准测试软件的用途。您可以使用google bench,ark来获取这些信息。您可以因此,在方法1中使用在线版本多次设置对角线。方法2演示了经典的“for/if”反模式。它们都以列主顺序迭代行主数组。@EVARATE One loopint matrix[xres][yres]={};for(int i=0,dim=min(xres,yres);i
int matrix[xres][yres];
for(yindex = 0; yindex < yres; yindex += 1){
xindex = yindex; // The only value for which we have something to do.
if ( xindex < xres ){ // Keep this check from the old inner loop!
matrix[xindex][yindex] = 1;
}
}
int matrix[xres][yres];
for(unsigned index = 0; index < yres; index += 1){
if ( index < xres ){
matrix[index][index] = 1;
}
}
int matrix[xres][yres];
for(unsigned index = 0; index < yres && index < xres; index += 1){
matrix[index][index] = 1;
}
int matrix[xres][yres];
for(unsigned index = 0; index < std::min(xres, yres); ++index){
matrix[index][index] = 1;
}