我对 C 中 for 循环构造的性能有一些疑问
考虑到以下代码是在 linux 64 位系统上执行的,哪个版本会提供更好的性能:
for (i = 0;i<10000;i++)
{
for (j = 0;j<10000;j++)
{
x[i][j] = 0;
}
}
或者
for (i = 0;i<10000;i++)
{
for (j = 0;j<10000;j++)
{
x[j][i] = 0;
}
}
您应该问的真正问题是:C++ 中的矩阵是按行主要还是列主要顺序排列的?答案是row major。
在这两种情况下,您都在做嵌套的 for 循环。
由于循环在另一个循环中,因此需要时间
O(log2(n)^2)
所以基本上,如果嵌套了 2 个循环,独立于其中的操作,它将需要 n*n = n^2。如果循环没有嵌套,则需要 n+n = 2n
您可以自行了解:
/* Example 1 */
time_t start = clock();
for (i = 0;i<10000;i++)
{
for (j = 0;j<10000;j++)
{
x[i][j] = 0;
}
}
float t = (float)(clock() - start)/CLOCKS_PER_SEC;
printf("%f\n", t);
/* Example 2 */
start = clock();
for (i = 0;i<10000;i++)
{
for (j = 0;j<10000;j++)
{
x[j][i] = 0;
}
}
t = (float)(clock() - start)/CLOCKS_PER_SEC;
printf("%f\n", t);