我正在研究一个蛇游戏项目,但我刚刚意识到旧的printf
太慢而无法显示15 * 45的二维数组。
如果您知道任何输出更快的I / O请帮助我!
我的目标是大约0.10 - 0.15秒。
我也接受图书馆,但我想要完全版权:p:p。
for (y = 0; y < MAX_Y ; y++)
{
printf ("\t");
for (x = 0; x < MAX_X; x++)
{
printf ("%c", base[y][x]);
}
printf ("\n");
}
答案 0 :(得分:3)
由于您不使用真实格式,并且只打印单个字符,因此您可以使用简单的putchar()
函数:
for (y = 0; y < MAX_Y ; y++)
{
putchar ('\t');
for (x = 0; x < MAX_X; x++)
{
putchar(base[y][x]);
}
putchar('\n');
}
在我的机器上,迭代循环100,000,在3次运行中测试它并将输出重定向到/dev/null
,给了我:
printf
,putchar
,putchar_unlocked
)。如果我使用终端输出,我有:
printf
,putchar
,putchar_unlocked
。经过的时间是:
printf
,putchar
,putchar_unlocked
。-Edit ----单写 ---------
您还可以将所有内容分组到一个字符串中并使用puts
,如下所示:
char baseString[MAX_Y*(MAX_X+2)+1];
int p = 0;
for (int y = 0; y < MAX_Y ; y++)
{
baseString[p++] = '\t';
for (int x = 0; x < MAX_X; x++)
{
baseString[p++] = base[y][x];
}
baseString[p++] = '\n';
}
baseString[p] = 0;
puts(baseString); // or fwrite(baseString,p,1,stdout);
在这种情况下,测试给出:
这比putchar_unlocked
略好。
所有测试均在OSX 10.9,Intel Core i7 2.3Ghz上进行。
答案 1 :(得分:0)
怎么样
fwrite(base[y], MAX_X, 1, stdout)
一次写一整行
不,我没有测试它的速度