2013-03-12 107 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

相關問題