如何减少我的C程序的开销?

时间:2012-03-17 06:12:57

标签: c linux optimization

我在Linux上使用C,而我的程序具有高CPU密度和I / O密度。使用time命令显示我的程序有很多开销:

real    1m4.639s
user    0m53.929s
sys         0m9.747s

可以找出'sys 0m9.747s'的成本并减少它吗?

=============================================== ==

对不起,如果没有代码这个问题不容易回答,但是我的代码太长了,无法在这里发布。所以任何提示或线索也会这样做。谢谢

2 个答案:

答案 0 :(得分:7)

系统CPU时间是内核为进程执行系统调用所花费的时间。您可以使用strace找出您的流程正在执行的系统调用。

也许您有许多小型read系统调用(或write个)。您可以通过增加缓冲区大小来降低其数量(因此每个readwrite将传输更多字节)。请参阅thisthat相关问题的答案。

您还可以使用mmap将文件投影到(虚拟)内存中;对于某种磁盘I / O,这可能是更好的方法。

但我不会专注于系统时间。它似乎只占CPU时间的15%,这是一个合理的比例。

我建议对您的计划进行概要分析(使用gprofoprofile)并找出瓶颈所在。

答案 1 :(得分:3)

这是一个非常开放的问题,如果没有更多信息,问题的范围有多广,没有具体的正确答案。也就是说,我建议您使用类似valgrind的内容来分析您的应用程序,找出代码中哪些特定功能花费最多时间,然后进行优化。

除此之外,您应该专注于用户土地上的时间。在53秒和9秒的系统时间内,您可能能够在那里优化更多。您可以更好地使用优化时间。