2013-03-12 95 views
1

假设有两个程序a.outb.out做同样的事情:排序元素。 a.out执行QuickSort排序算法,其中需要O(nlogn)时间和O(logn)内存,b.out执行BubbleSort排序算法,其中需要O(n^2)时间和O(1)内存。我想获得这两种算法之间时间和内存比较的一些直观感受,那么是否有任何Linux命令用于测量程序运行后的时间和内存使用情况?用于检测程序的计算机资源使用情况的Linux命令

回答

2

编程方式,我会用getrusage(),它可以让你衡量单一的功能,并在不仅仅是timetop到更多细节。例如:

#include <sys/time.h> 
#include <sys/resource.h> 
#include <unistd.h> 

int main (int argc, char *argv[]) 
{ 
    struct rusage start; 
    struct rusage end; 

    getrusage (RUSAGE_SELF, &start); // get time at start 

    some_function();     // Function to measure 

    getrusage (RUSAGE_SELF, &end);  // get time at end 

    printf ("System: %d usecs, User: %d usecs\n", 
      end.ru_stime.tv_usec - start.ru_stime.tv_usec, 
      end.ru_utime.tv_usec - start.ru_utime.tv_usec); 
... 

rusage结构包含以下内容:

struct rusage { 
    struct timeval ru_utime; // user time used 
    struct timeval ru_stime; // system time used 
    long ru_maxrss;   // maximum resident set size 
    long ru_ixrss;   // integral shared memory size 
    long ru_idrss;   // integral unshared data size 
    long ru_isrss;   // integral unshared stack size 
    long ru_minflt;   // page reclaims 
    long ru_majflt;   // page faults 
    long ru_nswap;   // swaps 
    long ru_inblock;   // block input operations 
    long ru_oublock;   // block output operations 
    long ru_msgsnd;   // messages sent 
    long ru_msgrcv;   // messages received 
    long ru_nsignals;   // signals received 
    long ru_nvcsw;   // voluntary context switches 
    long ru_nivcsw;   // involuntary context switches 
}; 
1

使用时间,这将给你的程序的真实,用户和系统时间。 例如

time ./a.out 

顶部命令可用于内存使用情况。

+0

或者使用HTOP提供更好的功能和看起来更好! – Hayden 2013-03-12 08:05:57

+0

似乎没有办法用一个命令来衡量两者。 – CDT 2013-03-12 08:13:26

+0

查看clock()函数以获得程序内更精确的时序。 – suspectus 2013-03-12 08:21:52

1

尝试time - 一次简单的命令或提供资源使用情况。 GNU版本还报告了内存使用:

/usr/bin/time --format="real\t%e\nuser\t%U\nsys\t%S\nmem:\t%M" -- ./a.out 
+0

我该如何运行GNU版本? – CDT 2013-03-12 08:13:04

+0

它应该位于'/ usr/bin'中。如果你想运行这个版本,你需要指定路径。否则shell版本的'time'将会被执行 – 2013-03-12 08:20:58

+0

这个命令的工作方式和我预期的一样,但是cdarke的方法提供单一的函数测量〜这很难拒绝。 – CDT 2013-03-12 08:30:41

相关问题