-7

我对 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;
    }
}
4

3 回答 3

3

您应该问的真正问题是:C++ 中的矩阵是按行主要还是列主要顺序排列的?答案是row major

于 2013-09-27T13:48:51.647 回答
1

在这两种情况下,您都在做嵌套的 for 循环。

由于循环在另一个循环中,因此需要时间

O(log2(n)^2)

所以基本上,如果嵌套了 2 个循环,独立于其中的操作,它将需要 n*n = n^2。如果循环没有嵌套,则需要 n+n = 2n

于 2013-09-27T13:54:58.000 回答
0

您可以自行了解:

/* 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);
于 2013-09-27T13:51:36.033 回答