2010-07-10 86 views

回答

3

這取決於你的系統;沒有哪個標準更快。我的猜測是他們通常都是以相同的速度。 gettimeofday是比較傳統的,如果你希望你的代碼可以移植到舊系統上,這可能是一個不錯的選擇。 clock_gettime有更多的功能。

-2

看看這個discussion。它看起來質量很好,與你可能要查找的有點過時的東西非常接近。

4
int main() 
{ 
    struct timespec tp; 
    struct timeval tv; 
    int i=0; 
    int j=0; 
    for(i=0; i < 500000; i++) 
    { 
     gettimeofday(&tv, NULL); 
     j+= tv.tv_usec%2; 
     clock_gettime(CLOCK_HIGHRES, &tp); 
     j+=tp.tv_sec%2; 
    } 
    return 0; 

} 



%Time Seconds Cumsecs #Calls msec/call Name 
    68.3 0.28 0.28 500000  0.0006 __clock_gettime 
    22.0 0.09 0.37 500000  0.0002 _gettimeofday 
    7.3 0.03 0.40 1000009  0.0000 _mcount 
    2.4 0.01 0.41  1  10.  main 
    0.0 0.00 0.41  4  0.  atexit 
    0.0 0.00 0.41  1  0.  _exithandle 
    0.0 0.00 0.41  1  0.  _fpsetsticky 
    0.0 0.00 0.41  1  0.  _profil 
    0.0 0.00 0.41  1  0.  exit 

這在Solaris 9 v440盒子上運行。在您自己的盒子上分析代碼。這個結果與之前提供的鏈接中引用的結果完全不同。換句話說,如果存在差異,那將是由於隱含的原因。

2

你不在乎。

如果你經常打電話給他們其中任何一個,那麼它很重要,你做錯了。

配置文件代碼導致特定的性能問題,並檢查它在那裏花費的時間。如果它太多,可以考慮重構它以減少調用函數的次數。

+1

如果你用這種方式回答問題,你做錯了:-)也許他想寫他自己的分析器?這些函數的執行時間本身可能會影響它們傳遞的結果。 – hirschhornsalz 2016-04-15 10:04:08

0

取決於常數,用於clock_gettime()。對於最快的時鐘,常量有CLOCK_*_COARSE。這些定時器是最快的,但並不精確。

gettimeofday()應返回相同的clock_gettime(CLOCK_REALTIME)

此外,基準測試結果取決於架構(Linux版)。由於Linux有專門的技術(VDSO)來消除系統調用以獲得時間。這些技術在X86-32bit架構上無法使用。請參閱strace輸出。