【发布时间】:2011-09-20 15:34:17
【问题描述】:
这是关于比赛的节目。
我正在提交一个程序并发现我的指标在总执行速度方面比得分最高的人要慢得多。所有其他(页面错误,内存......)都是相似的。我发现当我在没有 printf(或 write)的情况下运行我的程序时,我的总执行速度(在我自己的电脑上测量)似乎是相似的。
比赛通过将输出(我想是用管道)重定向到一个文件并将其 MD5 与他们的匹配来评估输出......
我的问题是,C 中是否有任何东西不会写入输出流,但管道仍会获取其输入。或者我什至把这个问题定错了。但无论哪种方式,我都在解决问题。
我一直在努力优化算法。顺便说一句,他们接受许多人试图优化的makefile。对我来说,这两个优化标志都不起作用。我也不知道还能做些什么……
【问题讨论】:
-
stdout应该被缓冲,应该会产生相当低的开销。您可以尝试将printf对sprintf的调用更改为缓冲区,看看它是否仍然表现不佳?另外,您的输出需要格式化吗? -
如果他们将输出重定向到文件,为什么不按照他们的方式在外部进行呢?在linux中执行命令时,写:
./program > my_output -
@Hasturkun。每个测试用例产生的输出少于 512 个字符,而 512 是我的缓冲区大小...您建议的缓冲区大小是多少,因为我不知道测试用例的数量。
-
@Shahbaz 我不知道他们将我的输出重定向到哪里。
-
@loxxy:我对
sprintf的建议主要是看看您是否因printf调用本身而遭受开销,即。在没有实际输出的情况下进行格式化。这主要是因为我不知道您的数据是如何表示和输出的。一个代码 sn-p 可能会有所帮助
标签: c linux pipe filestream