我正在开发一款贪吃蛇游戏,但是我发现旧的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");
}
-O3
或-Ofast
编译,让编译器尝试将输出最大程度地优化。唯一的其他选择是编写一个快速的assembly
函数来写出所需的字符 - 无论哪种方式都会有函数调用开销(printf
,putchar
或yourAssemblyFunc
),你可以在两种方式中任选其一来削减显著的百分比。(虽然printf
等应该已经被很好地优化了) - David C. Rankinprintf
和putchar
几乎总是使用用户空间中的缓冲区(这仅涉及 CPU)。当然,该缓冲区有时会被写入设备,但即使在这种情况下,这也涉及调用系统函数(在 Unix 下为write
),而该函数反过来只会写入系统空间中的缓冲区!系统调用很慢,但主要是因为它们在真正运行之前验证其参数的有效性。真正的 I/O 是在幕后异步完成的。 - Jean-Baptiste Yunès