【发布时间】:2014-01-24 09:25:53
【问题描述】:
我有一个函数返回指向包含 4 个字符的 char 的指针。
char *foo(unsigned short n)
{
return "abc\n";
}
现在我运行它 100 000 次并将结果发送到标准输出。而且必须尽可能以最快的方式完成。
在不写入的情况下运行此函数 100 000 次大约需要 0.45 秒。
我试过的:
- printf
...
printf("%s", foo(n));
...
~6.5s
- 写入
...
fwrite(foo(n), 4, 1, stdout);
...
~9.9s
- strncat 用于缓冲和写入
char buffer[400001] = "";
...
strncat(buffer, foo(n), 4);
...
fwrite(buffer, 400000, 1, stdout);
~7s
有没有办法让它更快?我希望至少低于 5 秒。
【问题讨论】:
-
你忘记 puts() (每行)或 puch() 循环...
-
如果您对程序进行计时,您可能会发现它实际上只使用了几毫秒的 CPU 时间。其余的都是由于您的输出终端处理文本的速度。 .. 为什么需要在屏幕上打印这么多数据?你不能读那么快,对吗?
-
我不相信这些数字。以
./a.out > /tmp/out.txt运行它以获得更真实的度量(甚至首先重定向到/dev/null)。 -
如果你只有一个固定的字符串,肯定是
fputs而不是fprintf。 -
作为替代方案,您甚至可以检查无缓冲 I/O(以防万一)