2014-03-25 71 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 
$