2014-03-25 69 views
1

我正在分析在優化級別-O3上編譯的C++應用程序,其中包括intel composer xe 2013的intel C++編譯器。剖析器(OS X上的儀器)聲明正在花費很大一部分時間特定類型對象的析構函數。但是,它不會提供有關首先分配對象的功能的信息。有沒有什麼工具可以提供關於哪些函數分配某種類型對象的最大數量的信息?剖析C++析構函數調用

編輯:我也嘗試了intel C++編譯器的-profile-functions標誌,但沒有成功。

+0

你正在尋找一個工具,將在OS X中工作? –

+0

Linux也很好 –

+0

嚴格的要求是它必須和C++一起工作 –

回答

1

您可以爲構造函數,文件和行號添加兩個參數。將該信息保存在對象中,並在調用析構函數時將其打印出來。或者,你可以在構造函數的宏中隱藏一些醜陋的東西。

#include <iostream> 
#include <string> 
using std::string; 

class Object 
{ 
    string _file; 
    int _line; 
    public: 
    Object(const char * file, int line) : _file(file), _line(line) {} 
    ~Object() { std::cerr << "dtor for object created in file: " << _file << " line: " << _line << std::endl; } 
}; 

int main(int argc, char * argv[]) 
{ 
    Object obj(__FILE__, __LINE__); 
    return 0; 
} 

這是它的運行

$ g++ main.cpp -o main && ./main 
dtor for object created in file: main.cpp line: 16 
$