2013-04-13 38 views
2

有沒有什麼辦法可以通過編程獲得C程序運行的總時間以及在特定函數中花費的時間量?我需要在代碼中這樣做,因爲我想將這兩個值用作另一個函數的參數。由於我在Linux上,我能夠使用gprof或perf來做到這一點嗎?以編程方式獲得Linux上函數的總時間和忙時間

+2

您是否做過任何調查?有「時間」和「時鐘」功能等等。 –

+0

另請參閱http://www.pixelbeat.org/programming/profiling/ –

回答

2
  1. 獲取程序啓動時的系統時間。然後,只要你願意,你可以得到當前時間,並減去開始時間。這告訴你在掛鐘時間裏跑了多久。

  2. 有一個全局布爾值Q,當你的函數進入時設置爲True,當它退出時設置爲False,所以只有當程序在函數「包含」時才爲真。

  3. 設置一個定時器中斷,每隔N ms關閉一次,並且有兩個全局計數器A和B.(N不一定要小)。當定時器中斷時,無論增加B,只增加如果Q是真的。

這樣,你知道已經過了多少時間,而A/B是你的函數在堆棧上的那一小部分時間。

順便說一句:如果函數是遞歸的,讓Q是一個整數「深度計數器」。否則,沒有改變。

+0

另外,每次調用函數時,我都不能在函數內部啓動一個新的定時器,並且函數返回時,將該流逝的時間添加到計數器(如您的示例中的B)? –

+2

@John:那可能會起作用,但調用get-time例程可能比您的函數中發生的代價要貴。中斷方法的優點是採樣率可以儘可能低。它不一定是高頻率。 –

1

是的,您可以使用gprof,但需要重新編譯您要測量以插入所需的監控代碼的二進制文件。默認情況下,程序不會花時間記錄這些數據,所以您必須添加它。使用gcc,這是通過使用-pg選項完成的。

+0

如何從gprof以編程方式獲取性能分析數據?我沒有看到方法。 –

+0

-pg插入代碼來計算函數調用並保持調用者的跟蹤器;它不插入監控代碼;監視由OS進行,OS定期對IP地址進行採樣。 –

1

您可以使用相同的gprof

+0

未讀過問題的人的另一個「答案」。 –

相關問題