C/C++在Linux
问题描述:
环路性能我有关于对循环构造中是Na linux的64位系统,其版本将提供更好的性能执行ÇC/C++在Linux
考虑下面的代码的性能的一些疑问:
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++中的矩阵行优先或列优先顺序排列?答案是排主要。
答
你可以找到自己:
/* 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);
答
你正在做嵌套在两种情况下循环。
由于环是在另一个回路中,时间将采取
O(LOG2(N)^ 2)
因此,基本上,如果2个循环是嵌套的,不依赖于它里面的操作它将采取n * n = n^2。如果环路没有嵌套,它将需要n + n = 2n认真地?
?你为什么不试试自己?我正在认真考虑拍拍'performance'标签,这样每个人都会知道这些问题是无稽之谈。 –
1)配置文件,如果你甚至可以测量运行时间,你就会知道答案。 2)使用memset,为此用例进行了优化。 –