我为我的C程序使用gcc。 如何检查哪种方法更快(假设我编写交换两个数字的代码,并使用位运算符重写相同的代码),在linux中是否有任何工具来检查时间,性能和空间?
在简单的情况下,你描述我会使用这个
$ vi test.c $ make test cc test.c -o test $ time ./test real 0m1.001s user 0m0.001s sys 0m0.000s
当比较几个组件的完整执行时,我会使用罗马概述的gprof方法。
这一切都取决于情况。 但是十分之九的时间方法对我来说已经足够了。 但是,我想当与线程多个进程和GUI代码工作的情况会有所不同。 但这不是我的专业领域。
有一个名为Valgrind ( 维基百科 )的工具,我建议你也看看。
有Valgrind工具可以自动检测许多内存管理和线程错误,并详细分析您的程序。
男人gprof应该帮助。
但请记住,如果您使用分析器,您应该测试大量的循环。 而且你应该用缓存效果进行计算,因此至少应该在具有随机(但相同)顺序的足够大的内存区域数据上执行此操作。 为此,使用srandom()/ random()。
最小设置:
为了找到你的代码所花费的时间,你可以使用这样的东西:
clock_t start, end; start = clock(); < your block(s) of code here> end = clock(); printf("Time taken %lf\n", (double) (end-start) / CLOCKS_PER_SEC);
它提供了几秒钟的时间。 使用time.h
为了查找内存消耗,当您运行进程时,可以使用“top”检查相关字段。
如果您需要在程序中或者在测试代码中记录时间,则可以简单地使用times()或clock()。
http://www.gnu.org/software/libc/manual/html_node/Processor-And-CPU-Time.html
做这样的查询最简单的方法是这样的:
for (i = 100000000; --i >= 0; ){ swap(&a, &b); swap(&a, &b); swap(&a, &b); swap(&a, &b); swap(&a, &b); swap(&a, &b); swap(&a, &b); swap(&a, &b); swap(&a, &b); swap(&a, &b); }
swap
是你想要的功能,这段代码运行10 ^ 9次。
然后,只要你的手表。 它需要的秒数转换为纳秒。
有一个像数字交换一样简单的函数,比较内存使用和速度的最简单方法可能是在调试器中查看代码。 当你可以看到与原始C一起的优化程序集时,你应该能够计算每个程序集的汇编操作(无法想象一个数字交换不止一条汇编行),并且能够很好地处理哪个方法更快,并查看每个函数中涉及的寄存器的数量,以决定哪个方法使用更多的内存。 但是,你不想在大功能上做到这一点。