C代码的性能
我在我的 c 程序中使用 gcc。如何检查哪种方法更快(假设我编写了一个代码来交换两个数字,并且我使用位运算符重写了相同的代码),linux中有没有任何工具可以检查时间、性能和空间?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我在我的 c 程序中使用 gcc。如何检查哪种方法更快(假设我编写了一个代码来交换两个数字,并且我使用位运算符重写了相同的代码),linux中有没有任何工具可以检查时间、性能和空间?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
man gprof 应该有帮助。
但请记住,如果您使用探查器,您应该测试大量循环。
并且您应该在计算缓存效果的情况下执行此操作,因此至少应该以随机(但相同)的顺序对足够大的内存区域数据执行此操作。为此使用 srandom() / random() 。
最小设置:
man gprof should help.
But remember, if you use profiler you should test large number of loops.
And you should do it with caching effect counted so at least this should be performed on large enough memory area data with random (but the same) order. Use srandom() / random() for this.
Minimal setup:
在您描述的简单情况下,我会使用这个
当比较几个组件的完整执行时,我会使用 Roman 概述的 gprof 方法。
这一切都取决于具体情况。但十分之九的时间方法对我来说就足够了。但我想当使用线程、多个进程和 GUI 代码时,情况会有所不同。但这不是我的专业领域。
有一个名为 Valgrind 的工具(维基百科)我推荐你也看看。
In the simple case you describe i'd use this
When comparing the full execution of several components i'd use the gprof method outlined by Roman.
It all depends on the situation. But 9 times out of 10 the time approach is sufficient to me. But i suppose when working with threads multiple processes and GUI code the situation would be different. That is however not my field of expertise.
There is a tool called Valgrind (wikipedia) that i recommend you too have a look at.
要查找代码所花费的时间,您可以使用如下内容:
它给出了以秒为单位的所花费的时间。使用 time.h
要查找内存消耗,您可以在运行进程时使用“top”检查相关字段。
For finding the time taken by your code, you could use something like this:
It gives the time taken in seconds. Uses time.h
For finding the memory consumptions, you can check the relevant field using 'top' when you run the process.
如果您需要在程序中或在测试代码中监视时间或记录时间,您可以简单地使用 times() 或 clock() 。
http://www.gnu.org/软件/libc/manual/html_node/Processor-And-CPU-Time.html
If you need to monitor time within your program, or in a test code or log it, you can simply use times() or clock() .
http://www.gnu.org/software/libc/manual/html_node/Processor-And-CPU-Time.html
执行此类查询的最简单方法是:
其中
swap
是您想要计时的函数,此代码运行它 10^9 次。然后用手表计时即可。
所花费的秒数转换为纳秒。
The simplest way to do such a query is this:
where
swap
is the function you want to time, this code runs it 10^9 times.Then just time it with your watch.
The number of seconds it takes translates to nanoseconds.
对于像数字交换这样简单的函数,比较内存使用情况和速度的最简单方法可能是查看调试器中的代码。当您可以看到优化后的汇编与原始 C 一起时,您应该能够计算每个汇编操作的数量(无法想象数字交换会超过少数汇编线)并很好地掌握哪种方法更快,并查看每个函数中涉及的寄存器数量来决定哪个方法使用更多内存。但是,您不想在大型函数上执行此操作。
With a function as simple as a number swap, the easiest way to compare memory usage and speed might be to look at the code in a debugger. When you can see the optimized assembly alongside the original C, you should be able to count assembly operations for each (can't imagine a number swap being more than a handful of assembly lines) and get a good handle on which method is faster, and look at the number of registers involved in each function to decide which method uses more memory. You wouldn't want to do this on large functions, however.