2010-08-10 142 views
1

我正在分析一個最近被File讀取佔優勢的程序。我對如何解釋結果感到困惑。如果有人能向我解釋這四大功能是什麼,這對我有很大的幫助。提前致謝!幫助解釋分析器結果[STL]

% cumulative self    self  total   
time seconds seconds calls ms/call ms/call name  
25.00  0.95  0.95        _Unwind_SjLj_Register 
15.79  1.55  0.60        std::num_get<char, std::istreambuf_iterator<char, std::char_traits<char> > >::_M_extract_float(std::istreambuf_iterator<char, std::char_traits<char> >, std::istreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, std::_Ios_Iostate&, std::string&) const 
10.26  1.94  0.39        std::string::_M_mutate(unsigned int, unsigned int, unsigned int) 
10.00  2.32  0.38        _Unwind_SjLj_Unregister 

回答

3

第一個和最後一個用於異常處理;它們是由編譯器生成的,用於註冊當異常離開當前作用域時必須調用析構函數的對象。如果您可以重構代碼以避免拋出異常,或調用可能拋出的函數,並且在使用非平凡析構函數的對象的生命週期中,您可能可以避免調用這些函數。但是,這通常是不可能的。

第二個是用於解析來自輸入流的float值的內部函數。

第三個是用於調整字符串大小的內部函數,可能是在解析流時內部使用的字符串。

+0

啊,謝謝。是的,我正在使用ifstream從文件中讀取大約700k浮點數。也許我應該嘗試一個scanf,而不是...謝謝 – Xzhsh 2010-08-10 19:32:43

+0

請發佈,讓我知道如果這使得你的代碼更快。 – 2010-08-11 12:29:23

1

num_get用於字符串t數字的轉換,我猜想mutate函數會以某種方式改變字符串的大小。所以我猜你的程序正在讀取字符串並將它們轉換爲數字。 Unwind的東西,我猜想是異常處理。不看代碼就不能說更多。